OSI 七層網(wǎng)絡(luò)模型 | TCP/IP 四層概念模型 | 對應(yīng)網(wǎng)絡(luò)協(xié)議 |
應(yīng)用層(Application) | 應(yīng)用層 | HTTP、TFTP, FTP, NFS, WAIS、SMTP |
表示層(Presentation) | 應(yīng)用層 | Telnet, Rlogin, SNMP, Gopher |
會話層(Session) | 應(yīng)用層 | SMTP, DNS |
傳輸層(Transport) | 傳輸層 | TCP, UDP |
網(wǎng)絡(luò)層(Network) | 網(wǎng)絡(luò)層 | IP, ICMP, ARP, RARP, AKP, UUCP |
數(shù)據(jù)鏈路層(Data Link) | 數(shù)據(jù)鏈路層 | FDDI, Ethernet, Arpanet, PDN, SLIP, PPP |
物理層(Physical) | 數(shù)據(jù)鏈路層 | IEEE 802.1A, IEEE 802.2到IEEE 802.11 |
以上便是各個網(wǎng)絡(luò)協(xié)議對應(yīng)的 osi 模型,那么各個協(xié)議的用法是怎樣的了,下面我們一起來看下
1、構(gòu)造一個 IP 包,并傳入一些參數(shù)
#構(gòu)造一個 IP 包,并傳入一些參數(shù) pkt = IP(dst="192.168.1.2",ttl=10) ls(pkt) version:版本號 ihl:頭長度 tos:服務(wù)類型 len:IP數(shù)據(jù)包總長 id:標識符 flags:標記 flag:片偏移 ttl:生存時間 proto:協(xié)議類型 chksum:頭部校驗 src:源IP地址 dst:目的IP地址 options:可選項
2、構(gòu)造ARP包
#構(gòu)造ARP包 ARP(op=1, hwdst="ff:ff:ff:ff:ff:ff", pdst=ip_address) #arp類的構(gòu)造函數(shù)列表: ls(ARP) hwtype : XShortField = (1) 值為1表示以太網(wǎng)地址,其它還可能表示令牌環(huán)地址 ptype : XShortEnumField = (2048) 0x0800表示IP地址,其它還可能是ICMP/IGMP hwlen : ByteField = (6) ARP報文中,它的值為6 plen : ByteField = (4) ARP報文中,它的值為4 op : ShortEnumField = (1) 取值為1或者2,代表ARP請求或者響應(yīng)包。1.ARP請求,2.ARP應(yīng)答,3.RARP請求,4.RARP應(yīng)答 hwsrc : ARPSourceMACField = (None) 發(fā)送方Mac地址。 psrc : SourceIPField = (None) 發(fā)送方IP地址。 hwdst : MACField = ('00:00:00:00:00:00') 目標Mac地址。 pdst : IPField = ('0.0.0.0') 目標IP地址。
3、構(gòu)造Ether
#構(gòu)造Ether Ether(dst="ff:ff:ff:ff:ff:ff") ls(Ether) dst : DestMACField = (None) 目的MAC src : SourceMACField = (None) 源MAC type : XShortEnumField = (36864) 構(gòu)造一個以太網(wǎng)數(shù)據(jù)包通常需要指定目標和源MAC地址,如果不指定,默認發(fā)出的就是廣播包ff:ff:ff:ff:ff:ff
4、構(gòu)造TCP包
#構(gòu)造TCP包 sport : ShortEnumField = 20 (20) 目標端口 dport : ShortEnumField = 80 (80) 源端口 seq : IntField = 0 (0) ack : IntField = 0 (0) dataofs : BitField (4 bits) = None (None) reserved : BitField (3 bits) = 0 (0) flags : FlagsField (9 bits) = Flag 2 (S)> (Flag 2 (S)>) window : ShortField = 8192 (8192) chksum : XShortField = None (None) urgptr : ShortField = 0 (0) options : TCPOptionsField = [] (b'')
可分為兩種情況,用法如下:
1、只發(fā)不收
send(pkt, inter=0, loop=0, count=1, iface=N) pkt:數(shù)據(jù)包 inter:發(fā)包間隔時間 count:發(fā)包數(shù)量 iface:網(wǎng)卡接口名稱 send(),在第三層發(fā)包,沒有接收功能;send(IP(dst="www.baidu.com",ttl=2)/ICMP()) sendp(),在第二層發(fā)包,沒有接收功能。sr(Ether()/IP(dst=www.baidu.com))
2、發(fā)包且收包
sr()和sr1()都是在第三層發(fā)包,sr1表示只接收第一個回復。 sr(IP(dst="www.baidu.com",ttl=(1,4))/TCP(dport=[21,23,80],flags="S")) 返回兩個值 sr1(IP(dst="www.baidu.com",ttl=(1,4))/ICMP()) srloop(IP(dst="www.baidu.com",ttl=1)/ICMP()) #不停的ping百度 srloop(IP(dst="www.baidu.com",ttl=1)/ICMP(),inter=3,count=2) #每隔3秒ping一次,一共執(zhí)行兩次 #inter表示間隔,count記錄次數(shù) srp()和srp1()都是根據(jù)第二層發(fā)包,srp1表示只接收第一個回復 srp(Ether()/IP(dst="www.baidu.com")) srp1(Ether()/IP(dst=www.baidu.com))
當 TCP 鏈接指定端口時,flags 參數(shù)設(shè)為 S 時則為半開式掃描,若此時該端口處于監(jiān)聽狀態(tài),返回 syn/ack,否則返回 rst/ack
sr1(IP(dst="192.168.1.2")/TCP(dport=80,flags="S"))
序列化:將數(shù)據(jù)包對象保存為 pcap 文件
反序列化:讀取 pcap 文件中的內(nèi)容
pkt= Ether()/IP(dst='192.168.1.2')/TCP(dport=80) #將嗅探到的數(shù)據(jù)包內(nèi)容寫到pcap文件中 wrpcap("hw.pcap",pkt) #讀取pcap文件。 read=rdpcap('hw.pcap') print(read[1])#打印嗅探到的包的數(shù)據(jù)
更加直觀清晰的分析數(shù)據(jù)。
zfc= str(pkts[0]) z= Ether(zfc)
為了方便我們對數(shù)據(jù)進行加密而發(fā)明的一種方式
export_object(str(pkts[0])) 導出數(shù)據(jù)包 new_Pkt = import_object() #將上一步導出的字符串填入
如果我們捕獲到數(shù)據(jù)包,未聯(lián)網(wǎng)的情況下如何解析呢?
現(xiàn)在就可以使用我們的離線數(shù)據(jù)包分析數(shù)據(jù)了:
sniff(offline = "hw.pcap")#離線數(shù)據(jù)包
通過上面的學習,我們對 scapy 算是有了一個基礎(chǔ)性的認識了,scapy 的確很強大,簡單的幾行命令就能實現(xiàn)發(fā)包收包,極大的節(jié)省了我們的開發(fā)時間
如果你深入學習它的每個命令,你會發(fā)現(xiàn)更多有趣的事情,當然這么強大的工具可不要拿來做壞事哦!
以上就是Python使用scapy模塊發(fā)包收包的詳細內(nèi)容,更多關(guān)于Python用scapy模塊發(fā)包收包的資料請關(guān)注腳本之家其它相關(guān)文章!
標簽:景德鎮(zhèn) 宿遷 臺灣 濟南 三沙 黃山 欽州 喀什
巨人網(wǎng)絡(luò)通訊聲明:本文標題《Python使用scapy模塊發(fā)包收包》,本文關(guān)鍵詞 Python,使用,scapy,模塊,發(fā),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。