Python 監(jiān)聽(tīng)網(wǎng)絡(luò)數(shù)據(jù)是一種非常常見(jiàn)的技能。在 Python 中,可以通過(guò) Socket 和 Scapy 兩種方式來(lái)實(shí)現(xiàn)監(jiān)聽(tīng)網(wǎng)絡(luò)數(shù)據(jù),具體實(shí)現(xiàn)方式取決于你的需求。下面將介紹兩種實(shí)現(xiàn)方案。
Socket 方案
首先,需要導(dǎo)入 Socket 模塊,然后創(chuàng)建一個(gè) Socket 對(duì)象,指定 IP 地址及端口號(hào)。然后使用bind()
方法與該端口號(hào)進(jìn)行綁定。接著,可以使用listen()
方法開(kāi)始監(jiān)聽(tīng)。
import socket HOST = '127.0.0.1' PORT = 8888 # create socket object s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # bind socket to address s.bind((HOST, PORT)) # start listening s.listen(1) # loop for receiving data while True: conn, addr = s.accept() print('Connected by', addr) data = conn.recv(1024) print(data.decode()) conn.close()
Scapy 方案
Scapy 是一個(gè)強(qiáng)大的 Python 包,可以實(shí)現(xiàn)數(shù)據(jù)包的嗅探、發(fā)送和解析。使用 Scapy 進(jìn)行監(jiān)聽(tīng)網(wǎng)絡(luò)數(shù)據(jù)的方式非常類似于 Socket 方案。首先,需要導(dǎo)入 Scapy 模塊,然后使用sniff()
方法開(kāi)始監(jiān)聽(tīng)。
from scapy.all import * def packet_callback(packet): print(packet.summary()) # start sniffing sniff(prn=packet_callback, count=1)
上述代碼將只監(jiān)聽(tīng)一個(gè)數(shù)據(jù)包,如果需要持續(xù)不斷地監(jiān)聽(tīng)網(wǎng)絡(luò)數(shù)據(jù),則可以不指定 count 參數(shù)。當(dāng)收到數(shù)據(jù)包后,調(diào)用 packet_callback 函數(shù)對(duì)數(shù)據(jù)包進(jìn)行處理。
以上就是使用 Python 監(jiān)聽(tīng)網(wǎng)絡(luò)數(shù)據(jù)的兩種實(shí)現(xiàn)方案,具體使用取決于你的需求和環(huán)境。