【发布时间】:2015-03-02 03:25:49
【问题描述】:
在 Linux、Ubuntu 14.04 中: 我正在编写一个实现套接字的代码来发送纯 UDP 数据报,其中包括 UDP 标头+有效负载,没有 IP 标头的任何部分。
我已经创建了套接字
sokt_fd=socket(AF_INET, SOCK_RAW, IPPROTO_UDP)
另外,我已经准备好了 UDP 标头。
我想把IP封装过程留给内核。
我想通过任何可用的 IP 接口发送数据报。 (我不想指定源IP,也把这个任务交给内核)。
发送数据报前是否需要指定目的IP地址。
-
我必须使用“sendto()”命令发送数据报;我必须如何填充“sockaddr”数据结构?
#include <netinet/in.h> struct sockaddr { unsigned short sa_family;// address family, AF_xxx char sa_data[14];// 14 bytes of protocol address };
【问题讨论】:
-
根据 Stevens UNIX 网络编程,
IPPROTO_UDP不能与SOCK_RAW一起使用。如果您想创建自己的 UDP 数据包并让内核将它们封装在 IP 数据包中,那么您应该使用IPPROTO_RAW和SOCK_RAW。 -
我可以像这样创建套接字吗:sokt_fd=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); ??
-
是的。这将创建一个未绑定到本地地址的无连接 UDP 套接字。
标签: c linux network-programming