使用原始套接字将数据包写入接口时,进程未接收这些数据包

时间:2014-02-23 17:42:51

标签: c linux sockets networking

我正在使用原始套接字在eth3端口上编写以下数据包:

------------------
ETHERNET HEADER
------------------
+ IP HEADER
------------------
+UDP HEADER
------------------
+Payload
------------------

如果我使用wireshark观察来自eth3接口的数据包,我可以看到我正在发送的数据包,但是从eth3读取的应该接收这些数据包的进程在某种程度上不接收这些数据包。

如果我在eth3上发送相同的数据包,在外部使用另一台计算机并写入其eth3接口并通过lan将其连接到以前的计算机,则该过程似乎会收到这些数据包。

当我尝试在内部发送数据包时,我怀疑存在一些问题,即通过同一台机器上的进程。

你能建议一个解决方案吗?

1 个答案:

答案 0 :(得分:0)

您的进程可能会根据消息的包类型过滤消息(它可能会/可能不会处理类型为3的包)。

这是数据包类型的列表(从文件if_packet.h复制):

#define PACKET_HOST         0       /* To us        */
#define PACKET_BROADCAST    1       /* To all       */
#define PACKET_MULTICAST    2       /* To group     */
#define PACKET_OTHERHOST    3       /* To someone else  */
#define PACKET_OUTGOING     4       /* Outgoing of any type */
#define PACKET_LOOPBACK     5       /* MC/BRD frame looped back */
#define PACKET_USER         6       /* To user space    */
#define PACKET_KERNEL       7       /* To kernel space  */