Dieser Artikel vermittelt Ihnen relevantes Wissen über Python. Er stellt hauptsächlich die Verwendung der libpcap-Bibliothek für die Paketerfassung und Datenverarbeitung vor, einschließlich der Installation von libpcap, der Verwendung der libpcap-Bibliothek usw. Schauen wir uns das an. Ich hoffe, es hilft allen.
[Verwandte Empfehlungen: Python3-Video-Tutorial]
Python-Version: Python 3.9
libpcap-Version: 1.11.0b7
Die Python-Libpcap-Bibliothek ist eine Entwicklung Paket für die zugrunde liegende C-Sprachbibliothek libpcap Ziel ist es, die Unix-C-Libpcap-Bibliotheks-API (sowie Npcap und WinPcap für Win32-Systeme) für Python-Anwendungen zugänglich zu machen und dabei den zugrunde liegenden C-Code mit sehr guter Leistung direkt zu verwenden.
Hier wird aufgezeichnet, wie die libpcap-Bibliothek in Python3.9 unter Windows 10 installiert und verwendet wird (für Linux- und Mac-Systeme siehe Windows).
Pypi-Adresse: https://pypi.org/project/libpcap/
Github-Adresse: https://github.com/karpierz/libpcap
Verwenden Sie pip zur direkten Installation:
pip install libpcap
Die neueste Version wird standardmäßig installiert.
Sie finden den Quellcode oder die WHL-Datei auf der Pypi-Seite. 2.2 Führen Sie die Offline-Installation durch Sie können die WHL-Datei auch für die Offline-Installation verwenden. Der Installationsbefehl lautet wie folgt:
2. Verwenden Sie die libpcap-Bibliothek1. Importieren Sie die PCAP-Bibliothek und geben Sie sie an
python -m pip install ./libpcap-1.11.0b7
2. Einführung zu gängigen APIs
tcpdump wird basierend auf libpcap implementiert. Die Dokumentation von libpcap in der C-Sprache finden Sie auf der offiziellen Website von tcpdump:
https://www.tcpdump.org/manpages/pcap.3pcap.html
Hier finden Sie eine Beschreibung der allgemeinen Schnittstellen von Python.2.1 Holen Sie sich die Netzwerkgeräteschnittstelle
Parameter:
errbuf ist ein Zeichenfolgentyp in C-Sprache, der zum Abrufen von Fehlerinformationen verwendet wird.
Verwendungsbeispiel:
python -m pip install libpcap-1.11.0b7-py3-none-any.whl
Funktion: Mit dieser Funktion werden alle Netzwerkgeräte gefunden.
Parameter:import libpcap libpcap.config(LIBPCAP="wpcap")
Funktion: Diese Funktion wird zum Öffnen eines Netzwerks verwendet Gerät, das Daten erfasst
import ctypes as ct import libpcap as pcap errbuf = ct.create_string_buffer(pcap.PCAP_ERRBUF_SIZE + 1) device = pcap.lookupdev(errbuf) print(errbuf.value)
import ctypes as ct import libpcap as pcap errbuf = ct.create_string_buffer(pcap.PCAP_ERRBUF_SIZE + 1) alldevs = ct.POINTER(pcap.pcap_if_t)() pcap.findalldevs(ct.byref(alldevs), errbuf) print(alldevs[0].name) pcap.freealldevs(alldevs)
handle为pcap_t类型指针
pheader为pcap_pkthdr结构体指针,可通过pkthdr函数创建
返回值:返回u_char类型指针,代表包数据,可使用struct.unpack函数解析
使用示例:
import libpcap as pcap pheader = pcap.pkthdr() packet = pcap.next(handle,pheader)
dump_open(handle,fname:bytes)
功能:该函数用于打开文件,存储获取到的数据包。
参数:
handle为pcap_t类型指针
fname为文件名称
返回值:返回pcap_dumper_t 类型指针,后面的所有操作都要使用这个指针。
使用示例:
import libpcap as pcap fname = b"realtime1.cap" fPcap = pcap.dump_open(handle,fname)
dump(handle,pheader,packet)
功能:该函数用于存储获取到的数据包。
参数:
handle为pcap_dumper_t类型指针
pheader为pcap_pkthdr结构体指针
packet是数据包
返回值:无返回值
使用示例:
fPcapUbyte = ct.cast(fPcap,ct.POINTER(ct.c_ubyte)) pcap.dump(fPcapUbyte,pheader,packet)
dump_flush(handle)
功能:该函数用于将缓存的数据刷到磁盘
参数:
handle为pcap_dumper_t类型指针
返回值:错误码,0代表成功,-1代表出错
close(handle)
功能:释放pcap_t类型指针
参数:
handle为pcap_t类型指针
返回值:无返回值
dump_close(handle)
功能:释放pcap_dumper_t类型指针
参数:
handle为pcap_dumper_t类型指针
返回值:无返回值
可以使用libpcap库进行网卡实时数据抓包,这里进行简单的示例:
1)首先需要获取或指定抓包设备
方法1 :指定网卡接口名称
device = b'\Device\NPF_{BFDBF91E-9848-417D-B8AB-D3ED19990717}' # windows
device = b'eth0' # linux
Windows网卡接口名称可在wireshark的捕获界面看到,具体如下:
linux网卡名称获取:ifconfig
方法2 :使用lookupdev获取网卡接口名称
device = pcap.lookupdev(errbuf)
方法3 :使用findalldevs获取网卡接口名称
alldevs = ct.POINTER(pcap.pcap_if_t)()
pcap.findalldevs(ct.byref(alldevs), errbuf)
device =alldevs[0].name
2)使用open_live函数进行网卡抓包;
3)使用pkthdr函数创建header,获取包头信息(时间戳、包大小);
4)使用next函数循环读取数据包,需要注意的是,获取的packet对象的contents是C语言类型,需要使用它ctypes的pointer函数进行转换;
5)数据包(比如IP头)的解析可使用struct的unpack函数;
6)如果要将抓包数据存盘,可使用dump_open、dump、dump_flush系列函数进行操作,需要注意的是,dump_open函数的第二个参数必须是byte类型;
示例代码及运行效果:
可以使用libpcap库进行离线抓包文件的解析,这里进行简单的示例:
1)首先需要使用open_offline函数打开pcap文件,需要注意的是,函数的第一个参数必须是byte类型;
2)使用pkthdr函数创建header,获取包头信息(时间戳、包大小);
3)使用next函数循环读取数据包,需要注意的是,获取的packet对象的contents是C语言类型,需要使用它ctypes的pointer函数进行转换;
4)数据包(比如IP头)的解析可使用struct的unpack函数;
示例代码及运行效果:
网卡实时抓包和离线数据解析时,可以设置过滤条件,避免数据量过大。
过滤条件示例:
1) 过滤IP
host 过滤某个ip的所有包
host 8.8.8.8
src 过滤源ip
src 8.8.8.8
dst过滤目的ip
dst 8.8.8.8
2)过滤端口
port进行单个端口过滤
port 22
portange进行多个端口过滤
portange 1-1024
可使用src或dst指定端口方向
src port 22
dst port 22
3)指定协议
tcp
udp
icmp
4)使用组合条件
and 进行与逻辑
src localhost and dst port 22
src localhost && dst port 22
or 进行或逻辑
port 80 or 22
Port 80 ||. 22
Beispielcode und Laufeffekt:
[Verwandte Empfehlungen: Python3-Video-Tutorial ]
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die libpcap-Bibliothek zur Paketerfassung und Datenverarbeitung in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!