gpt4 book ai didi

c - 使用原始套接字从 recvfrom 获取数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:45 25 4
gpt4 key购买 nike

我正在尝试实现我自己的传输层协议(protocol),但我非常乐意让网络层保持原样并且不需要弄乱实际的 IP header 信息。

当然,当在原始套接字上调用 recvfrom() 时,您将获得原始 IP 数据报,而 sockaddr 结构未填充。

有没有办法让堆栈填充这些结构并将 ip header 留在数据部分之外,还是需要手动实现?

接收者:

struct sockaddr_in sender;
int sender_len;

raw_socket = socket(AF_INET, SOCK_RAW, 56);

...

if((n = recvfrom(raw_socket, buf, 1024, 0, (struct sockaddr*)&sender, &sender_len)) == -1){
perror("recvfrom");
return -1;
}

最佳答案

在 SOCK_RAW 套接字上接收时将始终包含 IP header 。

根据 raw(7) :

The IPv4 layer generates an IP header when sending a packet unless the IP_HDRINCL socket option is enabled on the socket. When it is enabled, the packet must contain an IP header. For receiving the IP header is always included in the packet.

引用:

关于c - 使用原始套接字从 recvfrom 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26896944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com