首页 > 解决方案 > 使用 Python + 套接字构建数据包嗅探器

问题描述

所以我尝试用 Python 构建一个数据包嗅探器来加深我对网络的理解。事情是,事实证明它比我最初预期的更令人困惑。问题是所有具有详尽解释的资源都涵盖了为客户端/服务器数据发送/接收目的创建套接字的场景。

至此,我已经成功创建了一些处理 IPv4 和 ICMP 数据包头解码的类。现在,由于我的套接字代码似乎只捕获 ICMP 数据包,我一直在尝试对其进行配置,以便我可以捕获所有到达我的 wifi 接口的流量,但我仍然几乎只看到 ICMP 数据包(以 localhost 作为源和目标) .

所以,我有一些问题想得到解答。但首先,我的代码:

import socket
import sys
from protocols.ipv4 import IPv4

PACKET_SIZE = 65535

sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)

sock.bind(("0.0.0.0", 0))

try:
    while True:
        # read in a packet
        raw_buffer = sock.recvfrom(PACKET_SIZE)[0]
        # create an IP packet object
        ip_header = IPv4(raw_buffer)
        # print the packet
        print(ip_header)
except KeyboardInterrupt:
    print("\nExiting...")
    sock.close()
    sys.exit(0)

我是这样理解的:

我不明白的是:

我知道我目前对此的理解存在很多差距。我不确定我是否能够让这个工作,但我很好奇,我会很感激任何类型的答案,甚至只是一些好的资源来检查。

编辑:我的主要问题是我在哪里可以找到更多关于数据包嗅探上下文中的套接字的信息?

标签: pythonsocketspacket-sniffers

解决方案


推荐阅读