Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 原始套接字编程-为什么printf()会影响数据包发送?_C_Sockets_Raw Sockets - Fatal编程技术网

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

C 原始套接字编程-为什么printf()会影响数据包发送?,c,sockets,raw-sockets,C,Sockets,Raw Sockets,好的,这是一个非常奇怪的问题。我试图创建一个原始套接字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)); .... 事实证明,

好的,这是一个非常奇怪的问题。我试图创建一个原始套接字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*)欺骗

就在

关闭,

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

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

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

对不起,我没有提到printf()的事情。但是,当第一个问题得到一些解释时,它就会出现。是否有可能您正在调试模式下运行您的程序?在调试模式下,大多数编译器将未初始化的变量初始化为默认值(取决于编译器)。但是,当第一个问题得到一些解释时,它就会出现。是否有可能您正在调试模式下运行您的程序?在调试模式下,大多数编译器将未初始化的变量初始化为默认值(取决于编译器)。