好的,这是一个非常奇怪的问题。我试图创建一个原始套接字 ICMP 数据包来欺骗 ping 请求。
int s;
s = socket(PF_INET, SOCK_RAW, IPPROTO_RAW);
接着
int one; // I should initialize it as 1, but I didn't.
const int *val = &one;
setsockopt(s, IPPROTO_IP, IP_HDRINCL, val, sizeof(one));
....
事实证明,由于我没有将一个初始化为 1,所以被欺骗的客户端无法收到 ping 回复。但是,当我添加一个
unsigned char *ch = (unsigned char *)spoof;
就在之前
close(s);
,
事实证明,被欺骗的客户端可以收到 ping 回复。这是为什么?