gpt4 book ai didi

c - 原始套接字编程 - 为什么 printf() 会影响数据包发送?

转载 作者:太空宇宙 更新时间:2023-11-04 06:36:16 25 4
gpt4 key购买 nike

好吧,这是一个很奇怪的问题。我试图创建一个原始套接字 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;

就在

关闭(s);,

事实证明,被欺骗的客户端可以收到 ping 回复。这是为什么?

最佳答案

当你初始化自动存储失败时,它得到的值取决于你的程序最后一次使用它的目的,甚至是在同一个虚拟机空间中运行的前一个程序。因此,任何事情都可能发生。添加这行代码只会导致堆栈上的 one 值发生不同的对齐。该变量在其新位置的垃圾允许原始套接字工作。另一个没有。这是运气。

关于c - 原始套接字编程 - 为什么 printf() 会影响数据包发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14721052/

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