【发布时间】:2015-10-22 02:54:42
【问题描述】:
我想使用原始套接字发送 TCP 数据包,这是一个完整的 IP 数据包(所以数据包有 IP 头、TCP 头和 TCP 有效负载,但没有以太网头。IP 源地址和目标地址在 WLAN 中, 192.168.0.105 和 192.168.0.103),代码如下
int on;
on = 0;
if ((sendfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) {
perror("raw socket");
exit(1);
}
if (setsockopt(sendfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)) < 0) {
perror("setsockopt");
exit(1);
}
nr_bytes = sendto(sendfd, packet, ip_len, 0, (struct sockaddr*)&client_addr, addr_len);
我使用 TCPdump 捕获发送出去的数据包,注意到它在 IP 数据包中添加了一个额外的 IP 头,IP 协议号为 255(ip->ip_p 为 255)。所以它有两个 IP 头(具有相同的 src 和 dst IP 对),这是出乎意料的。
有什么问题?谢谢!
【问题讨论】:
标签: sockets network-programming raw-sockets