參照的文檔
<br />
構(gòu)造數(shù)據(jù)包
在 Scapy 中可以用特別簡(jiǎn)單的方法來構(gòu)造一個(gè)數(shù)據(jù)包,比如構(gòu)造一個(gè) IP 包,并傳入一些參數(shù):

使用 / 可以將不同的包進(jìn)行組合:

除了一個(gè)數(shù)據(jù)包一個(gè)數(shù)據(jù)包地構(gòu)造,Scapy 還支持同時(shí)構(gòu)造多個(gè)數(shù)據(jù)包:

此外,使用 fuzz 函數(shù)可以快速構(gòu)造隨機(jī)模板,同時(shí)保證其它參數(shù)是正確的,如:

在此構(gòu)造中,IP 層是普通的,而 UDP 和 NTP 層是 fuzz 的。因此,除了 UDP 和校驗(yàn)和必須正確和 UDP 的目標(biāo)端口必須是 123(NTP 協(xié)議要求)之外,其他的都是隨機(jī)的
<br />
發(fā)送數(shù)據(jù)包
構(gòu)造好了數(shù)據(jù)包之后,是時(shí)候把它們發(fā)出去了。Scapy 提供了基于第三層即網(wǎng)絡(luò)層的 send 函數(shù),和基于第二層即數(shù)據(jù)鏈路層的 sendp 函數(shù),這意味著,使用 sen
![Uploading Screenshot from 2016-05-13 20-27-49_682712.png . . .]
d 函數(shù)不需要我們考慮路由和第二層的細(xì)節(jié),而使用 sendp 函數(shù)需要我們指定發(fā)送數(shù)據(jù)包的網(wǎng)卡和鏈路層的協(xié)議。

接受數(shù)據(jù)包
在 Scapy 中使用 sr 函數(shù)、sr1 函數(shù)來發(fā)送和接收第三層的數(shù)據(jù)包(IP, ARP等),而 srp 函數(shù)用于發(fā)送和接受第二層的數(shù)據(jù)包(Ethernet,802.3等)
例如,我們向 bing.com 發(fā)送一個(gè) ICMP 包:

sr 函數(shù)是 Scapy 的核心,這個(gè)函數(shù)返回兩個(gè)列表,第一個(gè)列表是收到應(yīng)答的包和其對(duì)應(yīng)的應(yīng)答,第二個(gè)列表是未收到應(yīng)答的包,通常,我們需要調(diào)用別的函數(shù)來使得這兩個(gè)返回值更易于閱讀,如:

如果遠(yuǎn)程主機(jī)對(duì)于應(yīng)答的速率有限制,我們可以通過設(shè)置 inter 參數(shù)來設(shè)置發(fā)送相鄰兩個(gè)包直接的時(shí)間間隔,此外,我們可以通過設(shè)置 timeout 參數(shù)來設(shè)置等待應(yīng)答的超時(shí)時(shí)間,還可以設(shè)置 retry 參數(shù)來設(shè)置重試次數(shù)。在 Scapy 中,如果 retry = 3,那么 Scapy 會(huì)嘗試發(fā)送未應(yīng)答的包 3 次,如果 retry = -3 ,Scapy 會(huì)一直發(fā)送未應(yīng)答的包直到?jīng)]有更多的答案是相同的包 3 次(表示沒有理解這句話,原文是:If retry is -3, scapy will resend unanswered packets until no more answer is given for the same set of unanswered packets 3 times in a row.)
