簡體   English   中英

python3中的原始套接字

[英]Raw sockets in python3

我想編寫一個數據包嗅探器來嗅探所有傳入的 TCP 數據包。在我正在尋找的一個示例中,而不是使用 SOCK_RAW 而不是 SOCK_STREAM?

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
except socket.error as e:
    print('Socket creation failed. Error Code {} Message {}'.format(str(e[0]),str(e[1])))
    sys.exit()

#Include IP headers
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
packet = s.recvfrom(65565)

1) 在上述情況下,我可以使用 SOCK_STREAM 而不是 SOCK_RAW。 2) recvfrom(65565) 是什么意思? 這是否意味着從所有 TCP 端口而不是特定 TCP 端口接收?

  1. 如果您使用 SOCK_STREAM 而不是 SOCK_RAW,您將無法讀取協議標頭,而只能讀取通過 TCP 傳輸的數據。 另一方面,SOCK_RAW 將讓您訪問完整的數據包頭。 在您的情況下,由於您想構建自己的協議分析器(嗅探器), SOCK_RAW 應該是您的選擇。

  2. recvfrom的方法定義是:

    socket.recvfrom(bufsize[, flags])

    從套接字接收數據。 返回值是一對 (string, address),其中 string 是表示接收到的數據的字符串,address 是發送數據的套接字的地址

此方法僅從套接字接收最大bufsize字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM