只用作学习,切莫做其他用途,技术无罪知己知彼百战不殆。
打开DOS命令行
python -m pip install scapy
数据嗅探
iface: 指定在哪个网络接口上抓包
count: 表示要捕获数据包的数量。默认为0(不限制数量)
filter: 流量的过滤规则。使用的是BPF的语法
prn: 定义回调函数,使用lambda表达式来写回调函数(当符合filter的流量被捕获时,就会执行回调函数)
只捕获某个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 scapy.all import *
- sniff(filter='src host 192.168.1.124 && dst port 80', prn=lambda x:x.summary())
-
注意:必须要用管理员身份运行dos,否则无法获取网卡信息捕获失败。
- from scapy.all import *
-
- def Callback(packet):
- print('src:%s----->dst:%s'%(packet[IP].src, packet[IP].dst))
- print('TTL:%s'%packet[IP].ttl)
- print(packet.show()) #内置的show()函数打印数据包内容
-
-
- sniff(filter='src host 192.168.1.124 && dst port 80', prn=Callback)
-
- from scapy.all import *
- packet=sniff(filter='src host 192.168.1.124 && dst port 80', count=4) #捕获四个包
- wrpcap('data.pcap', packet) #保存为pcap文件
-
- from scapy.all import *
- import time
- import optparse
-
- #回调打印函数
- def PackCallBack(packet):
- print('*'*30)
- #打印源IP,源端口,目的IP,目的端口
- print("[%s]Source:%s:%s---->Target:%s:%s"%(TimeStamp2Time(packet.time), packet[IP].src, packet.sport, packet[IP].dst, packet.dport))
- #打印数据包
- print(packet.show())
- print('*'*30)
-
- #时间戳转换函数
- def TimeStamp2Time(timeStamp):
- timeTmp = time.localtime(timeStamp) #time.localtime()格式化时间戳为本地时间
- myTime = time.strftime("%Y-%m-%d %H:%M:%S", timeTmp) #将本地时间格式化为字符串
- return myTime
-
- if __name__ == '__main__':
- parser = optparse.OptionParser("Example:python %prog -i 127.0.0.1 -c 5 -o data.pcap\n")
- #添加IP参数 -i
- parser.add_option('-i', '--IP', dest='hostIP', default='127.0.0.1', type='string', help='IP address [default=127.0.0.1]')
- #添加数据包总参数 -c
- parser.add_option('-c', '--count', dest='packetCount', default=5, type='int', help='Packet count [default = 5]')
- #添加保存文件名参数-o
- parser.add_option('-o', '--output', dest='fileName', default='data.pcap', type='string', help='save filename [default = data.pcap]')
- (options, args) = parser.parse_args()
- defFilter = "dst" + options.hostIP
- packets = sniff(filter=defFilter, prn=PackCallBack, count=options.packetCount)
- #保存输出文件
- wrpcap(options.fileName, packets)
-
运行结果:
注:dos同样要用管理员身份运行。