简体   繁体   English

如何在 Linux 中使用 SOCK_RAW 接收 IPv4 数据包?

[英]How to receive IPv4 packets using SOCK_RAW in Linux?

How do I receive network layer (OSI Layer 3) packets in Linux?如何在 Linux 中接收网络层(OSI 第 3 层)数据包? More specifically, IPv4 packets regardless of transport layer protocol (UDP, TCP, ...).更具体地说,IPv4 数据包与传输层协议(UDP、TCP 等)无关。 Preferably in C without libraries.最好在没有库的 C 中。

Using socket(AF_INET, SOCK_RAW, IPPROTO_RAW) , I'm only able to send IPv4 packets;使用socket(AF_INET, SOCK_RAW, IPPROTO_RAW) ,我只能发送 IPv4 数据包; not receive.未收到。

Did you try with recvfrom from socket library.您是否尝试过使用套接字库中的recvfrom Like in this example :就像在这个例子中:

sock_raw = socket(AF_INET , SOCK_RAW , protocol);
while(1)
{
    data_size = recvfrom(sock_raw , buffer , 65536 , 0 , &addr , &addr_size);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM