,,使用Python实现windows下的抓包与解析

,,使用Python实现windows下的抓包与解析

本文主要介绍了利用Python实现windows下的包捕获和分析,很不错,有参考价值。有需要的朋友可以参考一下。

环境:windows7,我选择windows是因为我对日常机器上的流量感兴趣。

Python环境:python2.7 .这里之所以不选择python3,是因为接下来要用的scapy包在python3中安装要比python2麻烦很多。如果你习惯python3,包分析可以在3下完成,因为包捕获和分析是两个完全独立的过程。

需要Python包:scapy和dpkt

抓取包代码:

从scapy.sendrecv导入嗅探

从scapy.utils导入wrpcap

Dpkt=sniff(count=100) #这里是单网卡的机器,多网卡的网卡可以在参数中指定。

wrpcap('demo.pcap ',dpkt)

你说的没错,实现一个简单的包捕获功能只需要两行代码。Sniff函数负责嗅探数据包,而wrpcap函数保存捕获的数据包。

数据包的分析:

导入dpkt

导入插座

导入日期时间

def printPcap(pcap):

尝试:

对于时间戳,pcap中的buf:

eth=dpkt . Ethernet . Ethernet(BUF)#获取以太网包,即数据链路层包。

Print ('IP层:' eth . data . _ _ class _ _ _ _ _ name _ _)#以太网包的数据既是网络层包,

Print ('TCP层:' eth . data . data . _ _ class _ _ _ _ _ name _ _)#网络层包的数据既是传输层包,

print(' http layer:' eth . data . data . data . _ _ class _ _ _ _ name _ _)#传输层包的数据既是应用层包,

Print ('timestamp:',str(datetime . datetime . utcfromtimestamp(timestamp)))#打印出包的抓取时间。

如果不是isinstance(eth.data,dpkt.ip.IP):

print('不支持非IP数据包类型%s' % eth.data.__class__。__name__)

继续

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 _ off mask

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

除了:

及格

def main():

f=打开(' demo.pcap ',' rb ')

pcap=dpkt.pcap.Reader

printPcap(pcap)

if __name__=='__main__ ':

主()

结果显示:

这是我打开360的路由器卫士时抢到的包。这个软件一打开就和路由器通讯,获取连接路由器的电脑和手机列表。192.168.1.100是我的机器,192.168.1.1是路由器地址。可以看出,windows发送的数据包的ttl值默认为128,其他系统默认为64,这与我们的理论常识是一致的。

TCP/IP五层分层结构和数据包流程,两个附图:

总结

以上就是边肖给大家介绍的,用Python实现windows下的抓取和分析。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: