【问题标题】:Does libpcap use raw sockets underneath them?libpcap 是否在它们下面使用原始套接字?
【发布时间】:2011-10-22 00:00:47
【问题描述】:

我对使用原始套接字和 libcap 感到有些困惑。可以,任何人都可以简单地指出使用两者的优点。我读了几个链接,但是,它让我感到困惑。

【问题讨论】:

    标签: libpcap raw-sockets


    【解决方案1】:

    libpcap 在不同的操作系统上使用不同的机制。在 Linux 上,它使用 PF_PACKET 原始或熟套接字,这取决于它是否知道接口的 Linux 链路层类型(ARPHRD_ 值)以及该链路层类型的接口是否产生有用的链路-layer 标头(PPP 接口没有,因此您看不到网络层协议标识符)。在 Irix 上,它使用 PF_RAW 套接字和 RAWPROTO_SNOOP 协议。在其他系统上,它根本不使用原始套接字。

    原始套接字可用于多种用途,例如发送和接收原始 IPv4 数据包而不必担心链路层(即,它们插入 IP 层而不是网络设备驱动程序)。如果您需要访问原始链接层,大多数操作系统上的原始套接字不支持(Linux 和 Irix 是明显的例外,根据上一段),但 libpcap 支持。

    【讨论】:

    • 在 Windows 上,它使用较低级别的网络驱动程序来捕获数据。 RAW 套接字仅限于现代版本的 Windows 上的管理员用户。
    【解决方案2】:

    “libpcap”和“原始套接字”是不同的主题。

    Libpcap 是一个用于 linux 的数据包捕获库,用于捕获通过 eth0 等网络接口的流量/数据包。

    在 Windows 上,Winpcap 库做同样的事情。

    原始套接字是操作系统提供的套接字 API 的一项功能,可用于发送带有由应用程序而非操作系统定义的标头的数据包。因此,使用原始套接字我们可以指定 IP 、 TCP 标头并发送数据包。

    原始套接字自古以来就在 Linux 上可用。在 Windows 上,原始套接字仅在 Windows XP 和 Windows XP(SP1) 中可用。

    在 Windows 上,winpcap 库具有发送具有任意内容的数据包的功能,这意味着可以在 Windows 上使用 winpcap 实现原始套接字功能。

    【讨论】:

      猜你喜欢
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多