www.weide1946.com:运用Python实现windows下的抓包与深

2019-08-31 14:32 来源:未知

应用Python完结windows下的抓包与深入分析,pythonwindows

系统景况:windows7,选用windows系统是因为本人对友好平日一般机器上的流量比较感兴趣

python境遇:python2.7 ,这里不选拔python3的因由,是因为接下去要用到的scapy包在python3中安装较于python2要麻烦得多。假设你习贯于用python3,数据包的剖判完全能够放在3底下做,因为抓包和分析是四个完全独立的历程。

需要的python包:scapy和dpkt

抓包代码:

from scapy.sendrecv import sniff
from scapy.utils import wrpcap
dpkt = sniff(count = 100)  #这里是针对单网卡的机子,多网卡的可以在参数中指定网卡
wrpcap("demo.pcap", dpkt)

你没看错,仅仅只要求两行代码就足以兑现三个粗略的抓包成效。sniff函数担负嗅探数据包,而wrpcap函数将抓取到的数据包保存起来。

数据包的解析:

import dpkt
import socket
import datetime
def printPcap(pcap):
try:
for timestamp, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf) #获得以太包,即数据链路层包
print("ip layer:" eth.data.__class__.__name__) #以太包的数据既是网络层包
print("tcp layer:" eth.data.data.__class__.__name__) #网络层包的数据既是传输层包
print("http layer:"   eth.data.data.data.__class__.__name__) #传输层包的数据既是应用层包
print('Timestamp: ',str(datetime.datetime.utcfromtimestamp(timestamp))) #打印出包的抓取时间
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()

结果显示:

那是本身展开360的路由器卫士时抓取的数据包。这么些软件在开采时与路由器通讯,获得一连路由器的微型Computer和手提式有线电话机的列表。192.168.1.100是自个儿的机械,192.168.1.1是路由器地址,在那之中能够观察windows发送的数据包的ttl值暗中认可是128,其余的连串暗许是64,与大家的答辩常识是适合的。

TCP/IP五层分层的组织和封包进度,附图二张:

www.weide1946.com 1 www.weide1946.com 2

总结

如上所述是我给大家介绍的使用Python实现windows下的抓包与剖析,希望对我们持有支持,如若大家有其它疑问请给本人留言,笔者会及时回复大家的。在此也特别感激大家对帮客之家网站的支撑!

系统情形:windows7,选用windows系统是因为自个儿对协和日常常见机器上的流量相比较感兴趣 pytho...

系统景况:windows7,选拔windows系统是因为自身对友好日平常常机器上的流量相比感兴趣

系统意况:windows7,选拔windows系统是因为作者对团结平经常见机器上的流量比较感兴趣

python意况:python2.7 ,这里不选拔python3的缘故,是因为接下去要用到的scapy包在python3中装置较于python2要麻烦得多。假诺您见怪不怪于用python3,数据包的分析完全可以投身3上边做,因为抓包和分析是多个精光独立的长河。

python景况:python2.7 ,这里不选择python3的缘故,是因为接下去要用到的scapy包在python3中安装较于python2要麻烦得多。假让你习于旧贯于用python3,数据包的分析完全能够投身3上边做,因为抓包和剖判是五个精光独立的进度。

需要的python包:scapy和dpkt

需要的python包:scapy和dpkt

抓包代码:

抓包代码:

from scapy.sendrecv import sniff
from scapy.utils import wrpcap
dpkt = sniff(count = 100)  #这里是针对单网卡的机子,多网卡的可以在参数中指定网卡
wrpcap("demo.pcap", dpkt)

from scapy.sendrecv import sniff

您没看错,仅仅只必要两行代码就能够实现贰个轻松的抓包功效。sniff函数肩负嗅探数据包,而wrpcap函数将抓取到的数据包保存起来。

from scapy.utils import wrpcap

数据包的深入分析:

dpkt = sniff(count = 100)     #这边是对准单网卡的电话,多网卡的能够在参数中钦定网卡

import dpkt
import socket
import datetime
def printPcap(pcap):
try:
for timestamp, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf) #获得以太包,即数据链路层包
print("ip layer:" eth.data.__class__.__name__) #以太包的数据既是网络层包
print("tcp layer:" eth.data.data.__class__.__name__) #网络层包的数据既是传输层包
print("http layer:"   eth.data.data.data.__class__.__name__) #传输层包的数据既是应用层包
print('Timestamp: ',str(datetime.datetime.utcfromtimestamp(timestamp))) #打印出包的抓取时间
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()

wrpcap("demo.pcap", dpkt)

结果显示:

你没看错,仅仅只供给两行代码就足以兑现贰个简易的抓包成效。sniff函数肩负嗅探数据包,而wrpcap函数将抓取到的数据包保存起来。

那是自小编打开360的路由器卫士时抓取的数据包。那么些软件在开垦时与路由器通讯,得到再三再四路由器的Computer和手提式有线电电话机的列表。192.168.1.100是自身的机器,192.168.1.1是路由器地址,当中能够见到windows发送的数据包的ttl值私下认可是128,其余的系统暗中同意是64,与大家的辩驳常识是切合的。

数据包的解析:

TCP/IP五层分层的构造和封包进程,附图二张:

import dpkt

www.weide1946.com 3 www.weide1946.com 4

import socket

总结

import datetime

如上所述是小编给大家介绍的行使Python完毕windows下的抓包与剖判,希望对大家全体帮忙,倘诺大家有别的疑问请给笔者留言,作者会及时还原我们的。在此也非常多谢大家对剧本之家网址的协助!

def printPcap(pcap):

您也许感兴趣的小说:

  • python调用tcpdump抓包过滤的章程
  • python落成linux下抓包并存库功用

try:

for timestamp, buf in pcap:

eth = dpkt.ethernet.Ethernet(buf) #取得以太包,即数据链路层包

print("ip layer:" eth.data.__class__.__name__) #以太包的数额既是网络层包

print("tcp layer:" eth.data.data.__class__.__name__)  #网络层包的多寡既是传输层包

print("http layer:" eth.data.data.data.__class__.__name__)  #传输层包的数量既是应用层包

print('Timestamp: ',str(datetime.datetime.utcfromtimestamp(timestamp))) #打字与印刷出包的抓取时间

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()

结果突显:

www.weide1946.com 5

那是自个儿张开360的路由器卫士时抓取的数据包。那些软件在打开时与路由器通讯,得到三番五次路由器的微管理器和手提式有线电话机的列表。192.168.1.100是小编的机械,192.168.1.1是路由器地址,在那之中能够见见windows发送的数据包的ttl值暗许是128,别的的连串暗许是64,与我们的说理常识是吻合的。

TCP/IP五层分层的组织和封包进程,附图二张:

www.weide1946.com 6

www.weide1946.com 7

版权声明:本文由韦德娱乐1946_韦德娱乐1946网页版|韦德国际1946官网发布于网络编程,转载请注明出处:www.weide1946.com:运用Python实现windows下的抓包与深