1

为了解释我想得到什么,这里有一个例子。假设我们有一台带有一个 NIC 的 PC。它有一个 IP 地址 172.16.0.1。使用 VLC,我们启动一个 udp 流到 172.16.0.1:1234,然后启动另一个 VLC 副本并连接到 udp://@172.16.0.1:1234。现在我们将看到我们的视频流。

如果您运行嗅探器,您将在环回上看到从 172.16.0.1:some_random_port 到 172.16.0.1:1234 的数据包。我们的 NIC 上没有流量。

我想做的是在同一台计算机上流式传输和接收 udp,就像 VLC 一样。但主要问题是 pcap 只能 pcap_open() 一个真正的设备,它不能与环回一起工作。

有可能解决这个问题吗?

PS我使用的是Windows和WinPcap,不像Linux版本,它可以发送数据包。

4

1 回答 1

0

如果您只想发送和接收 UDP 数据包,我建议您只使用常规 Winsock 套接字,就像您在 UN*X 上使用常规套接字一样;使用 WinPcap 需要您重新实现 IP 和 UDP,并且不会让您在 Windows 下(或至少在某些版本的 UN*X 上)发送到同一台机器上的另一个套接字。

如果您想查看您发送的流量,不幸的是 WinPcap 将无济于事,因为它依赖于从 NDIS 发送和接收的数据包(其驱动程序插入 NDIS),而从一个发送的数据包不会发生这种情况一台机器上的socket连接到同一台机器上的另一个socket。

(注意,顺便说一句,libpcap可以在 Linux 和 *BSD 和 Mac OS X 和 Solaris 和 Digital/Tru64 UNIX 上发送数据包,并且已经能够这样做好几年了;旧版本的 libpcap 不支持它, 但是过去几年可用的版本可以。但是,根据我的第一段,在这些操作系统上使用 libpcap 发送和接收常规 UDP 数据包是没有意义的,就像使用 WinPcap 没有意义一样Windows 上的用途。)

于 2011-11-24T10:06:57.830 回答