Scapy 中文文檔:一举哟、介紹

介紹

譯者:pdcxs007

來(lái)源:Scapy介紹官方文檔翻譯

原文:Introduction

協(xié)議:CC BY-NC-SA 2.5

本人英文水平有限,翻譯不當(dāng)之處姨谷,請(qǐng)參考官方網(wǎng)站透敌。

關(guān)于Scapy

Scapy是一個(gè)可以讓用戶發(fā)送、偵聽和解析并偽裝網(wǎng)絡(luò)報(bào)文的Python程序筋帖。這些功能可以用于制作偵測(cè)、掃描和攻擊網(wǎng)絡(luò)的工具冤馏。

換言之日麸,Scapy 是一個(gè)強(qiáng)大的操縱報(bào)文的交互程序。它可以偽造或者解析多種協(xié)議的報(bào)文逮光,還具有發(fā)送代箭、捕獲、匹配請(qǐng)求和響應(yīng)這些報(bào)文以及更多的功能睦霎。Scapy 可以輕松地做到像掃描(scanning)梢卸、路由跟蹤(tracerouting)、探測(cè)(probing)副女、單元測(cè)試(unit tests)蛤高、攻擊(attacks)和發(fā)現(xiàn)網(wǎng)絡(luò)(network discorvery)這樣的傳統(tǒng)任務(wù)。它可以代替hping,arpspoof,arp-sk,arping,p0f 甚至是部分的Namp,tcpdumptshark 的功能碑幅。

testing-taxonomy.png

Scapy 在大多數(shù)其它工具無(wú)法完成的特定任務(wù)中也表現(xiàn)優(yōu)異戴陡,比如發(fā)送無(wú)效幀、添加自定義的802.11的偵沟涨、多技術(shù)的結(jié)合(跳躍攻擊(VLAN hopping)+ARP緩存中毒(ARP cache poisoning)恤批、在WEP加密信道(WEP encrypted channel)上的VOIP解碼(VOIP decoding))等等等等。

理念非常簡(jiǎn)單裹赴。Scapy 主要做兩件事:發(fā)送報(bào)文和接收回應(yīng)喜庞。您定義一系列的報(bào)文,它發(fā)送這些報(bào)文棋返,收到回應(yīng)延都,將收到的回應(yīng)和請(qǐng)求匹配,返回一個(gè)存放著(request, answer)即(請(qǐng)求, 回應(yīng))的報(bào)文對(duì)(packet couples)的列表(list)和一個(gè)沒(méi)有匹配的報(bào)文的列表(list)睛竣。這樣對(duì)于像Nmaphping 這樣的工具有一個(gè)巨大的優(yōu)勢(shì):回應(yīng)沒(méi)有被減少 (open/closed/filtered)而是完整的報(bào)文晰房。

在這之上可以建立更多的高級(jí)功能,比如您可以跟蹤路由(traceroutes)并得到一個(gè)只有請(qǐng)求的起始TTL和回應(yīng)的源IP的結(jié)果射沟,您也可以ping整個(gè)網(wǎng)絡(luò)并得到匹配的回復(fù)的列表殊者,您還可以掃描商品并得到一個(gè)<nobr>LATEX</nobr> 報(bào)表。

Scapy為何如此特別

第一验夯,對(duì)于其它的大多數(shù)網(wǎng)絡(luò)工具來(lái)說(shuō)猖吴,您無(wú)法制作一些作者無(wú)法想到的東西。這些工具已經(jīng)被一個(gè)特定的目標(biāo)所局限和固定挥转,因此無(wú)法和這個(gè)目標(biāo)有大的偏離距误。比如簸搞,一個(gè)ARP緩存中毒程序不會(huì)讓您使用double 802.1q 包裹內(nèi)容,同樣無(wú)法找到一個(gè)程序可以發(fā)送填充(padding)的ICMP報(bào)文(是填充(padding)准潭,不是負(fù)載(payload))趁俊。事實(shí)上,每次有新需求時(shí)刑然,您必需重新建立一個(gè)新的工具寺擂。

第二,這些工具經(jīng)称寐樱混淆解碼(decoding)和解釋(interpreting)怔软。機(jī)器擅長(zhǎng)解碼并能幫助人類完成這個(gè)工作。解釋應(yīng)該留給人類择镇。一些程序試圖模擬這個(gè)行為挡逼。比如它們說(shuō)“這個(gè)端口是打開的”而不是說(shuō)“我收到一個(gè)SYN-ACK“.有時(shí)它們是對(duì)的,但有時(shí)不是腻豌。這樣做對(duì)于初學(xué)者來(lái)說(shuō)更容易家坎,但是當(dāng)您知道您正在做什么,您將繼續(xù)試圖推從程序的解釋中測(cè)實(shí)際上發(fā)生了什么來(lái)制作自己的工具吝梅,但是這相當(dāng)困難虱疏,因?yàn)榇罅康男畔⒁呀?jīng)丟失。因此最終常常是您使用tcpdump -xX來(lái)解碼和解釋這些工具丟掉的內(nèi)容苏携。

第三做瞪,即使是那些只管解碼的程序也沒(méi)有把它們收到的所有的信息交給您。它們給您展示的網(wǎng)絡(luò)信息只是其作者認(rèn)為足夠的信息右冻。但是這些并不完整装蓬,對(duì)您來(lái)說(shuō)是偏頗的。比如纱扭,您知道有什么工具可以得到以太幀填充的報(bào)文嗎(reports the Ethernet padding)矛物?

事實(shí)上,每次運(yùn)行本程序跪但,更像是建造一個(gè)新的工具,不是處理上百行的C程序代碼峦萎,您使用Scapy只需寫幾行代碼屡久。

在探測(cè)(probe)(或者掃描(scan)、路由跟蹤(traceroute)等等)之后爱榔,Scapy總是在任何的解釋之前把探測(cè)到的所有的包解碼后給您被环。這意味著您可以探測(cè)一次而解釋很多次,也可以使用路由跟蹤并查看報(bào)文填充內(nèi)容详幽。

快速的報(bào)文設(shè)計(jì)

其它的工具堅(jiān)持命令行運(yùn)行的模式筛欢,這導(dǎo)致描述一個(gè)報(bào)文需要糟糕的語(yǔ)法浸锨。對(duì)于這些工具,解決的方法是在其作者想像的情景下版姑,采用一種更高層但是功能更弱的描述方法柱搜。舉例來(lái)說(shuō),在端口掃描的情景中剥险,端口掃描器必須的參數(shù)只有IP地址聪蘸。即使情景有所改變,情況依然如此(Even if the scenario is tweaked a bit, you still are stuck to a port scan)表制。

Scapy的原則是推薦使用一種特定領(lǐng)域語(yǔ)言(Domain Specific Language (DSL))以達(dá)到對(duì)于任何種類報(bào)文的功能強(qiáng)大并快速的描述健爬。使用Python語(yǔ)法和Python解釋器作為特定領(lǐng)域語(yǔ)言(DSL)的語(yǔ)法和解釋器有許多優(yōu)勢(shì):沒(méi)有必要寫一個(gè)單獨(dú)的解釋器,用戶不需要再學(xué)一種新語(yǔ)言并可以從這個(gè)完整么介、簡(jiǎn)約且非常強(qiáng)大的語(yǔ)言中受益娜遵。

Scapy允許用戶將一個(gè)或一系列報(bào)文描述成為一個(gè)個(gè)堆起來(lái)的層(layer)。每層的數(shù)據(jù)域有有用的且可重載的默認(rèn)值壤短。Scapy不強(qiáng)制用戶使用預(yù)先定義的方法和模板设拟。這樣每次碰到不同的情景時(shí)寫新工具的需要得到了減少。在C語(yǔ)言中鸽扁,描述一個(gè)報(bào)文可能平均要用60行代碼蒜绽。使用Scapy,發(fā)送的報(bào)文可能僅需一行代碼描述再加一行打印結(jié)果的代碼桶现。90%的網(wǎng)絡(luò)探測(cè)工具可以使用Scapy使用2行代碼重新實(shí)現(xiàn)躲雅。

一次探測(cè),多次解釋

網(wǎng)絡(luò)的發(fā)現(xiàn)是一個(gè)黑盒測(cè)試骡和。當(dāng)探測(cè)一個(gè)網(wǎng)絡(luò)時(shí)相赁,許多偵測(cè)報(bào)文(stimuli)發(fā)送然而它們當(dāng)中只有少數(shù)能夠被回應(yīng)。如果選擇了正確的偵測(cè)報(bào)文慰于,希望得到的信息可以通過(guò)回應(yīng)的報(bào)文或者是沒(méi)有回應(yīng)的情況來(lái)獲得钮科。不像很多其它的工具,Scapy得到所有的信息婆赠,也就是說(shuō)绵脯,所有的發(fā)送的偵測(cè)報(bào)文和所有收到的回應(yīng)。通過(guò)檢查這些數(shù)據(jù)用戶可以得到想要的信息休里。當(dāng)數(shù)據(jù)量較小時(shí)蛆挫,用戶可以直接查看數(shù)據(jù)。在其它情況下妙黍,對(duì)于數(shù)據(jù)的解釋將依賴于關(guān)注點(diǎn)的不同悴侵。多數(shù)工具選擇展示關(guān)注點(diǎn)內(nèi)容而忽略和關(guān)注點(diǎn)無(wú)關(guān)的內(nèi)容。由于Scapy給出完整的原始數(shù)據(jù)拭嫁,因此這些數(shù)據(jù)可以多次使用從而允許關(guān)注點(diǎn)在分析過(guò)程中發(fā)生變化可免。比如抓于,可能探測(cè)一個(gè)TCP端口掃描而關(guān)注(展示)端口掃描的結(jié)果。同時(shí)也可以查看回應(yīng)報(bào)文的TTL方面的內(nèi)容浇借。一個(gè)新的探測(cè)并不需要再來(lái)一次捉撮,而只是在已有的數(shù)據(jù)中改一下關(guān)注點(diǎn)即可。

scapy concept

Scapy解碼而不解釋

網(wǎng)絡(luò)探測(cè)工具所共有的一個(gè)問(wèn)題是它們都試圖解釋收到的回應(yīng)而非僅僅解碼并給出結(jié)果逮刨。報(bào)告一些類似于在80端口收到一個(gè)TCP Reset報(bào)文這樣的消息不屬于解釋錯(cuò)誤呕缭。報(bào)告80端口關(guān)閉在多數(shù)情況下是正確的,但是在某些特定的工具的作者沒(méi)有想到的上下文中是錯(cuò)誤的修己。比如恢总,一些掃描器在收到一個(gè)目的地址不可達(dá)的ICMP報(bào)文后傾向于報(bào)告一個(gè)過(guò)濾TCP端口。這可能是正確的睬愤,但是在某些情況下片仿,這表明報(bào)文被防火墻過(guò)濾掉而找不到報(bào)文的非目的主機(jī)。

解釋結(jié)果可以幫助那些不知道什么是端口掃描的用戶尤辱,但是弊大于利砂豌,因?yàn)檫@對(duì)于結(jié)果是一種主觀的解釋」舛剑可能的結(jié)果就是它們可以自己解釋阳距,知識(shí)豐富的用戶將試圖反向還原這個(gè)工具的解釋以得到引起這個(gè)解釋的真正原因。不幸的是结借,在這個(gè)過(guò)程中有大量的信息丟失筐摘。

快速展示(Quick demo)

首先我們稍微試一下,一次創(chuàng)建4個(gè)IP報(bào)文來(lái)看看這個(gè)工具是如何工作的船老。我們首先初始化IP類咖熟。然后,我們重新將其實(shí)例化并給出4個(gè)IP報(bào)文的目的地址(/30給出掩碼)柳畔。使用Python語(yǔ)法馍管,我們?cè)谝幌盗忻鞔_的報(bào)文中定義這個(gè)報(bào)文(we develop this implicit packet in a set of explicit packets)。然后薪韩,我們退出解釋器确沸。作為我們提供的會(huì)話文件(session file),這些我們正在使用變量已經(jīng)保存俘陷,然后重新加載:

# ./scapy.py -s mysession
New session [mysession]
Welcome to Scapy (0.9.17.108beta)
>>> IP()
<IP |>
>>> target="www.target.com"
>>> target="www.target.com/30"
>>> ip=IP(dst=target)
>>> ip
<IP dst=<Net www.target.com/30> |>
>>> [p for p in ip]
[<IP dst=207.171.175.28 |>, <IP dst=207.171.175.29 |>
 <IP dst=207.171.175.30 |>, <IP dst=207.171.175.31 |>]
>>> ^D 
# scapy -s mysession
Using session [mysession]
Welcome to Scapy (0.9.17.108beta)
>>> ip
<IP dst=<Net www.target.com/30 |> 

現(xiàn)在罗捎,我們來(lái)操縱一些報(bào)文:

>>> IP()
<IP |>
>>> a=IP(dst="172.16.1.40")
<IP dst=172.16.1.40 |>
>>> a.dst
'172.16.1.40'
>>> a.ttl
64

讓我們來(lái)說(shuō)我想要一個(gè)廣播的MAC地址,并且負(fù)載的IP報(bào)文要到達(dá)ketchup.com和mayo.com岭洲,TTL值從1到9,并負(fù)載UDP報(bào)文:

>>> Ether(dst="ff:ff:ff:ff:ff:ff")
     /IP(dst=["ketchup.com", "mayo.com"], ttl=(1,9))
     /UDP()

現(xiàn)在我們?cè)谝恍?一個(gè)確定報(bào)文(implicit packet))中定義了18個(gè)報(bào)文坎匿。

合理的默認(rèn)值

Scapy試圖在所有種類的報(bào)文數(shù)據(jù)域中使用合理的默認(rèn)值盾剩,如果沒(méi)有被重載的話雷激,

  • IP源地址根據(jù)目的地址和路由表選擇
  • 校驗(yàn)和自動(dòng)計(jì)算
  • 源MAC地址根據(jù)輸出接口(output interface)選擇
  • 以太網(wǎng)類型和IP協(xié)議由高層決定
default values ip

其它數(shù)據(jù)域選擇最有用的值:

  • TCP源端口為20,目的端口為80
  • UDP源端口和目的端口均為53
  • ICMP類型為echo request

學(xué)習(xí)Python

Scapy使用Python解釋器作為命令面板。這意味著你可以直接使用Python語(yǔ)言(創(chuàng)建變量告私,使用循環(huán)屎暇,定義函數(shù)等等)。

如果你剛開始使用Python并且因此你不理解這些詞語(yǔ)驻粟,或者如果你想學(xué)習(xí)這個(gè)語(yǔ)言根悼,花一個(gè)小時(shí)來(lái)閱讀一個(gè)Guido Van Rossum寫的非常棒的Python教程。在此之后蜀撑,你將知道Python :)(真的挤巡!)。對(duì)于更加深入的學(xué)習(xí)酷麦,Dive Into Python也是一個(gè)很好的開始矿卑。

作為一個(gè)快速的開始,下面是Python數(shù)據(jù)類型的概覽:

  • int(signed, 32bits) : 42
  • long(signed, infinite) : 42L
  • str : "bell\x07\n" or 'bell\x07\n'
  • tuple (immutable): (1,4,"42")
  • list (mutable): [4,2,"1"]
  • dict (mutable): {"one":1, "two":2}

Python中沒(méi)有塊分割符沃饶,而是同縮進(jìn)決定:

if cond:
    instr
    instr
elif cond2:
    instr
else:
    instr
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末母廷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子糊肤,更是在濱河造成了極大的恐慌琴昆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馆揉,死亡現(xiàn)場(chǎng)離奇詭異业舍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)把介,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門勤讽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人拗踢,你說(shuō)我怎么就攤上這事脚牍。” “怎么了巢墅?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵诸狭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我君纫,道長(zhǎng)驯遇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任蓄髓,我火速辦了婚禮叉庐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘会喝。我一直安慰自己陡叠,他們只是感情好玩郊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著枉阵,像睡著了一般译红。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兴溜,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天侦厚,我揣著相機(jī)與錄音,去河邊找鬼拙徽。 笑死刨沦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的斋攀。 我是一名探鬼主播已卷,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼淳蔼!你這毒婦竟也來(lái)了侧蘸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鹉梨,失蹤者是張志新(化名)和其女友劉穎讳癌,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體存皂,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晌坤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旦袋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骤菠。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疤孕,靈堂內(nèi)的尸體忽然破棺而出商乎,到底是詐尸還是另有隱情,我是刑警寧澤祭阀,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布鹉戚,位于F島的核電站,受9級(jí)特大地震影響专控,放射性物質(zhì)發(fā)生泄漏抹凳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一伦腐、第九天 我趴在偏房一處隱蔽的房頂上張望赢底。 院中可真熱鬧,春花似錦、人聲如沸幸冻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嘁扼。三九已至,卻和暖如春黔攒,著一層夾襖步出監(jiān)牢的瞬間趁啸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工督惰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留不傅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓赏胚,卻偏偏與公主長(zhǎng)得像访娶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子觉阅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • nmap使用指南(終極版) 原創(chuàng)2017-09-09hl0rey信安之路 一崖疤、目標(biāo)指定 1.CIDR標(biāo)志位 192...
    用電熱毯烤豬閱讀 11,999評(píng)論 1 49
  • 第二章 探索掃描(二) 作者:Justin Hutchens 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 2...
    布客飛龍閱讀 1,214評(píng)論 0 7
  • Nmap掃描原理與用法 1Nmap介紹 Nmap掃描原理與用法PDF:下載地址 Nmap是一款開源免費(fèi)的網(wǎng)絡(luò)發(fā)現(xiàn)(...
    y0ungta1a閱讀 5,387評(píng)論 0 50
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)典勇,斷路器劫哼,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • 此刻,我正躺在醫(yī)院的病床上割笙,感受著冰涼的液體一滴一滴被送入我的血管权烧。冬日的午后,陽(yáng)光也蒼白無(wú)力伤溉,路邊的花花草...
    魏文晶閱讀 376評(píng)論 0 2