一、scapy定製udp
Scapy支持廣泛的協議和基於Python的Packet生成器,可以通過一些簡潔的命令快速生成自定義協議的數據包。下面來看一個實例來定製UDP協議:
from scapy.all import * pkt=Ether()/IP(dst="192.168.0.1")/UDP(dport=50000)/"abcdefghijklmnopqrst" sendp(pkt)
上面的代碼,實現了在乙太網幀里添加了IPv4頭部和定製的UDP頭部,數據往返的結果是一個自定義的packet。
二、scapy庫使用教程
接下來我們看看scapy庫的使用教程:
在這之前需要先安裝好scapy。安裝方法如下:
pip install scapy
常用的使用方法:
(1)發送數據包
from scapy.all import * send(IP(dst="192.168.0.1")/TCP(sport=RandShort(), dport=80), count=10)
這裡 send 函數,將ip頭和tcp頭合成了一個數據包,並向目標主機192.168.0.1發送了10個TCP報文。
(2)抓取數據包
from scapy.all import * pkts = sniff(filter="tcp port 80", count=10) for pkt in pkts: print(pkt.summary())
上面的代碼使用sniff函數捕獲TCP埠為80的所有數據包,並列印出每個數據包的摘要。
三、scapy 獲取報文時間
Scapy 為我們提供了許多工具來檢查和操作嗅探到的包,例如時間戳。下面是一個例子:
from scapy.all import * from datetime import datetime start_time = datetime.now() pkt = sniff(count=50) end_time = datetime.now() total_time = end_time - start_time print("Total time: ",total_time)
在這個例子中,我們使用datetime模塊來跟蹤開始和結束時間,並計算執行時間。
四、scapy explore函數
Scapy還提供了explore函數來幫助用戶探究packet等一些對象的內容和結構。
from scapy.all import * pkt = Ether()/IP(dst="8.8.8.8")/ICMP() pkt.show() explore(pkt)
這個例子將展示pkt的結構以及可以使用的欄位。
五、scapy 解析 ipv6
Scapy可解析IPV6數據包。
from scapy.all import * inet6_packet = IPv6(src='fe80:6406:31dd:aa97:d260:a64:d1d4:c5cd', dst='fe80:0000:0000:0000:021b:77:c723:fa3c')/TCP(sport=51515, dport=80) pkt=Ether(src="aa:bb:cc:dd", dst="11:22:33:44")/inet6_packet pkt.show()
這個例子中,我們用IPv6()函數來構建一個IPv6數據包。我們像前面例子那樣用Ether()構建了一個乙太網數據包,將IPv6對象和其它的TCP選項組成了自定義數據包。
六、scapy模擬創建tcp到斷開的過程
Scapy可以發送多個不同類型的TCP包,用於TCP握手過程。下面是一個例子:
from scapy.all import * src_port = RandShort() dst_ip = "192.168.0.1" dst_port=80 seq = 10023 syn_packet = IP(dst=dst_ip)/TCP(sport=src_port, dport=dst_port, flags="S", seq=seq) syn_ack_packet = sr1(syn_packet) ack_packet = IP(dst=dst_ip)/TCP(sport=src_port, dport=dst_port, flags="A", seq=syn_ack_packet.ack, ack=syn_ack_packet.seq + 1) fin_packet = IP(dst=dst_ip)/TCP(sport=src_port, dport=dst_port, flags="F", seq=seq+1) close_ack_packet = sr1(fin_packet) print("Connection established!")
這個例子模擬了一個TCP三次握手的過程,通過構造不同類型的TCP包,以此來測試網路連通性。
七、excel教程
Scapy還支持將packets導出為Excel文件。下面是一個例子:
from scapy.all import * pkts = sniff(count=10) wrpcap('test.xls', pkts)
通過將抓取到的10個wifi packets以Excel格式的方式導出到test.xls文件中。
八、scapy抓包
Scapy是一個很好用的Python包,可以編寫一些簡潔的代碼來抓取數據包。下面是一個例子:
from scapy.all import * pkts = sniff(count=10) for pkt in pkts: print(pkt.summary())
在這個案例中,我們使用sniff函數並設置了count=10,以抓取10個數據包然後列印出它們的摘要。
九、scrapy框架
Scapy可以進行網路數據抓取,也可以作為數據解析框架。下面是一個例子:
from scapy.all import * pkts = sniff(count=10) result = [] for pkt in pkts: # 解析包頭 payload = pkt.payload result.append(str(payload)) print(result)
在這個案例中,我們用for循環迭代數據包,然後將數據包解析出來。最後把結果列表列印出來。
十、scapy sniff 提取data
最後一個例子,我們使用sniff函數抓取數據包並提取data欄位。
from scapy.all import * def handle_pkt(pkt): data = pkt[Raw].load print("Payload: %s" % data) sniff(filter="ip", prn=handle_pkt)
在這裡,我們定義了一個回調函數handle_pkt。通過觀察離散的片段數據(pkt)的內容(這些片段通常都被交錯捕捉到),然後通過pkt[Raw].load提取數據包的載荷欄位。最後,過濾IP分組的sniff()撞見了回調函數。payload參數是負載數據。
以上就是本文對scapy的詳細闡述,包括定製UDP、庫使用教程、獲取報文時間、explore函數、解析IPv6、模擬創建TCP到斷開的過程、Excel教程、抓包、數據解析框架和提取data。通過閱讀以上內容,相信您對Scapy有了更深的理解。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/247649.html