2023年7月3日发(作者:)
python抓包(sniff)-----实现wireshark抓包功能python嗅探(sniff)只⽤作学习,切莫做其他⽤途,技术⽆罪知⼰知彼百战不殆。安装scapy模块打开DOS命令⾏python -m pip install scapysniff()函数功能数据嗅探⼏个参数iface: 指定在哪个⽹络接⼝上抓包count: 表⽰要捕获数据包的数量。默认为0(不限制数量)filter: 流量的过滤规则。使⽤的是的语法prn: 定义回调函数,使⽤lambda表达式来写回调函数(当符合filter的流量被捕获时,就会执⾏回调函数)BPF过滤语法举例只捕获某个IP主机进⾏交互的流量:host 192.168.1.124只捕获某个MAC地址主机的交互流量:ether src host 00:87:df:98:65:d8只捕获来源于某⼀IP的主机流量:src host 192.168.1.125只捕获去往某⼀IP的主机流量:dst host 192.168.1.154只捕获80端⼝的流量:port 80只捕获除80端⼝以外的其他端⼝流量:!port 80只捕获ICMP流量:ICMP只捕获源地址为192.168.1.125且⽬的端⼝为80的流量:src host 192.168.1.125 && dst port 80简单应⽤只捕获源地址为192.168.1.124且⽬的端⼝为80的流量:from import *sniff(filter='src host 192.168.1.124 && dst port 80', prn=lambda x:y())注意:必须要⽤管理员⾝份运⾏dos,否则⽆法获取⽹卡信息捕获失败。也可细化打印出的内容,更改lambda表达式只打印源IP和⽬的IPprn=lambda x:x[IP].src+'---->'+x[IP].dst为了不让sniff()函数太冗长,可以定义⼀个callback()函数让prn调⽤from import *def Callback(packet): print('src:%s----->dst:%s'%(packet[IP].src, packet[IP].dst)) print('TTL:%s'%packet[IP].ttl)
print(()) #内置的show()函数打印数据包内容sniff(filter='src host 192.168.1.124 && dst port 80', prn=Callback)我们可以将数据包保存为pcap格式,⽤wireshark查看分析from import *packet=sniff(filter='src host 192.168.1.124 && dst port 80', count=4) #捕获四个包wrpcap('', packet) #保存为pcap⽂件可以⽤wireshark分析查看⼯具源码from import *import timeimport optparse#回调打印函数def PackCallBack(packet): print('*'*30) #打印源IP,源端⼝,⽬的IP,⽬的端⼝ print("[%s]Source:%s:%s---->Target:%s:%s"%(TimeStamp2Time(), packet[IP].src, , packet[IP].dst, )) #打印数据包 print(()) print('*'*30)#时间戳转换函数def TimeStamp2Time(timeStamp): timeTmp = ime(timeStamp) #ime()格式化时间戳为本地时间 myTime = me("%Y-%m-%d %H:%M:%S", timeTmp) #将本地时间格式化为字符串return myTimeif __name__ == '__main__': parser = Parser("Example:python %prog -i 127.0.0.1 -c 5 -o ") #添加IP参数 -i _option('-i', '--IP', dest='hostIP', default='127.0.0.1', type='string', help='IP address [default=127.0.0.1]') #添加数据包总参数 -c _option('-c', '--count', dest='packetCount', default=5, type='int', help='Packet count [default = 5]') #添加保存⽂件名参数-o _option('-o', '--output', dest='fileName', default='', type='string', help='save filename [default = ]') (options, args) = _args() defFilter = "dst" + packets = sniff(filter=defFilter, prn=PackCallBack, count=Count) #保存输出⽂件 wrpcap(me, packets)optparse模块功能:主要⽤来为脚本传递命令参数,采⽤预先定义好的选项来解析命令⾏参数。实例化⼀个 OptionParser 对象(可以带参,也可以不带参数),带参的话会把参数变量的内容作为帮助信息输出。参数:dest,⽤于保存输⼊的临时变量,其值通过options属性访问(多个参数⽤逗号隔开); type,⽤于设置参数数据类型;help,设置帮助信息;default,给dest的默认值。运⾏结果:注:dos同样要⽤管理员⾝份运⾏。
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688340437a123213.html
评论列表(0条)