python中實(shí)現(xiàn)抓包的方法-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

目前創(chuàng)新互聯(lián)已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、連城網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

python中實(shí)現(xiàn)抓包的方法?這個(gè)問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個(gè)問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

系統(tǒng)環(huán)境:windows7,選擇windows系統(tǒng)是因?yàn)槲覍?duì)自己平時(shí)日常機(jī)器上的流量比較感興趣

python環(huán)境:python2.7 ,這里不選擇python3的原因,是因?yàn)榻酉聛硪玫降膕capy包在python3中安裝較于python2要麻煩得多。如果你習(xí)慣于用python3,數(shù)據(jù)包的分析完全可以放在3下面做,因?yàn)樽グ头治鍪莾蓚€(gè)完全獨(dú)立的過程。

需要的python包:scapy和dpkt

抓包代碼:

from scapy.sendrecv import sniff
from scapy.utils import wrpcap
dpkt = sniff(count = 100)  #這里是針對(duì)單網(wǎng)卡的機(jī)子,多網(wǎng)卡的可以在參數(shù)中指定網(wǎng)卡
wrpcap("demo.pcap", dpkt)

你沒看錯(cuò),僅僅只需要兩行代碼就可以實(shí)現(xiàn)一個(gè)簡單的抓包功能。sniff函數(shù)負(fù)責(zé)嗅探數(shù)據(jù)包,而wrpcap函數(shù)將抓取到的數(shù)據(jù)包保存起來。

數(shù)據(jù)包的分析:

import dpkt
import socket
import datetime
def printPcap(pcap):
try:
for timestamp, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf) #獲得以太包,即數(shù)據(jù)鏈路層包
print("ip layer:"+eth.data.__class__.__name__) #以太包的數(shù)據(jù)既是網(wǎng)絡(luò)層包
print("tcp layer:"+eth.data.data.__class__.__name__) #網(wǎng)絡(luò)層包的數(shù)據(jù)既是傳輸層包
print("http layer:" + eth.data.data.data.__class__.__name__) #傳輸層包的數(shù)據(jù)既是應(yīng)用層包
print('Timestamp: ',str(datetime.datetime.utcfromtimestamp(timestamp))) #打印出包的抓取時(shí)間
if not isinstance(eth.data, dpkt.ip.IP):
print('Non IP Packet type not supported %s' % eth.data.__class__.__name__)
continue
ip = eth.data
do_not_fragment =bool(ip.off & dpkt.ip.IP_DF)
more_fragments =bool(ip.off & dpkt.ip.IP_MF)
fragment_offset = ip.off & dpkt.ip.IP_OFFMASK
print('IP: %s -> %s (len=%d ttl=%d DF=%d MF=%d offset=%d)' % (socket.inet_ntoa(ip.src), socket.inet_ntoa(ip.dst), ip.len, ip.ttl, do_not_fragment, more_fragments,fragment_offset))
except:
pass
def main():
f =open('demo.pcap','rb')
pcap = dpkt.pcap.Reader(f)
printPcap(pcap)
if __name__ =='__main__':
main()

結(jié)果顯示:

這是我打開360的路由器衛(wèi)士時(shí)抓取的數(shù)據(jù)包。這個(gè)軟件在打開時(shí)與路由器通信,獲得連接路由器的電腦和手機(jī)的列表。192.168.1.100是我的機(jī)器,192.168.1.1是路由器地址,其中可以看到windows發(fā)送的數(shù)據(jù)包的ttl值默認(rèn)是128,其他的系統(tǒng)默認(rèn)是64,與我們的理論常識(shí)是相符的。

感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)python中實(shí)現(xiàn)抓包的方法大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

新聞名稱:python中實(shí)現(xiàn)抓包的方法-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://muchs.cn/article48/dddphp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、企業(yè)網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、云服務(wù)器、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司