Python + winpcap抓包和发包

摘要:
winpcapyPython的winpcapy库可以简单地实现收发Layer2层数据。

winpcapy

Python的winpcapy库可以简单地实现收发Layer2层(数据链路层,以太网)数据。

winpcapy主页:https://github.com/orweis/winpcapy

安装

pip install winpcapy

发送数据

from winpcapy importWinPcapUtils
#Build a packet buffer#This example-code is built for tutorial purposes, for actual packet crafting use modules like dpkt
arp_request_hex_template = "%(dst_mac)s%(src_mac)s08060001080006040001""%(sender_mac)s%(sender_ip)s%(target_mac)s%(target_ip)s" + "00" * 18packet = arp_request_hex_template %{
    "dst_mac": "aa"*6,
    "src_mac": "bb"*6,
    "sender_mac": "bb"*6,
    "target_mac": "cc"*6,
    #192.168.0.1
    "sender_ip": "c0a80001",
    #192.168.0.2
    "target_ip": "c0a80002"}
#Send the packet (ethernet frame with an arp request) on the interface
WinPcapUtils.send_packet("*Ethernet*", packet.decode("hex"))

不过注意上面的Sample是Python2的,Python3如下:

WinPcapUtils.send_packet("*Ethernet*", bytes.fromhex(packet)) #for Python3

捕获数据

from winpcapy importWinPcapUtils

#Example Callback function to parse IP packets
defpacket_callback(win_pcap, param, header, pkt_data):
    #Assuming IP (for real parsing use modules like dpkt)
    ip_frame = pkt_data[14:]
    #Parse ips
    src_ip = ".".join([str(ord(b)) for b in ip_frame[0xc:0x10]])
    dst_ip = ".".join([str(ord(b)) for b in ip_frame[0x10:0x14]])
    print("%s -> %s" %(src_ip, dst_ip))

WinPcapUtils.capture_on("*Ethernet*", packet_callback)

WinPcapUtils类提供的API接口是指定网卡的设备描述(device description),一般场合是够用的。
不过也有特别的时候,使用双口的光通信模块时,两个光纤网卡的设备描述是相同的,这时需要指定设备名称(device name)

from winpcapy importWinPcap

device_name = '\Device\NPF_{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}'with WinPcap(device_name) as capture:
    capture.send(bytes.fromhex('ff'*6))

免责声明:文章转载自《Python + winpcap抓包和发包》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue后台管理系统项目TP6框架--EasyAdmin学习笔记:列表调用搜索,开发常见问题记录下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Python】python实现16进制字符串转化为ascii字符

字符串456e633064316e675f31735f66336e,通过python,按照两个字符,例如45,6e,63形式变成ascii码格式,输出acsii码格式的字符串。 代码如下: a = "456e633064316e675f31735f66336e" ''.join([chr(int(b, 16)) for b in [a[i:i+2] fo...

linux 安装Python3.6

1、安装依赖 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 2、下载安装包(可以Windows下载https:...

Python ORM框架之 Peewee入门

之前在学Django时,发现它的模型层非常好用,把对数据库的操作映射成对类、对象的操作,避免了我们直接写在Web项目中SQL语句,当时想,如果这个模型层可以独立出来使用就好了,那我们平台操作数据库也可以这么玩了,我不喜欢写SQL语句。 后来才知道,原来这个叫ORM(Object Relational Mapping,对象关系映射),在Python下面有很多...

python AES加密 ECB PKCS5

class AesEbc16:  # 按块的大小, 一块一块的加密, 明文和密文长度一样   def __init__(self):     self.key = b"123qweqqqwerqwer"  # 加密和解密用同一个秘钥, 长度为 每块的长度     self.mode = AES.MODE_ECB  # ECB加密模式, 也是默认的模式, 创...

Django基础(1)

昨日内容回顾: 1. socket创建服务器 2. http协议: 请求协议 请求首行 请求方式 url?a=1&b=2协议 请求头 key:value 请求体 a=1&b=2(只有post请求才有请求体) 响应协议...

windows10 Anaconda3安装教程

本文主要介绍在 windows 10 系统中安装 Anaconda3 的详细过程。 1. 官网下载安装包 官网下载Anaconda最新安装包: https://www.anaconda.com/distribution/ 根据自己的需要,选择适合自己电脑版本的安装包。我的电脑是win10 64位版本,所以下载下图所示的安装包。   官网下载页面...