Socat在末尾发送响应,但顺序不正确
我试图用socat作为服务器运行一个程序,这是一个非常简单的程序,但我没有按正确的顺序接收数据。我只在发送数据且顺序不正确时才收到服务器响应 节目:Socat在末尾发送响应,但顺序不正确,c,debugging,socat,C,Debugging,Socat,我试图用socat作为服务器运行一个程序,这是一个非常简单的程序,但我没有按正确的顺序接收数据。我只在发送数据且顺序不正确时才收到服务器响应 节目: #include <stdio.h> int main(int argc, char *argv[]){ char buff[64]; char t[10]; printf("Welcome\n"); gets(t); printf(t); printf("\n"); gets(
#include <stdio.h>
int main(int argc, char *argv[]){
char buff[64];
char t[10];
printf("Welcome\n");
gets(t);
printf(t);
printf("\n");
gets(buff);
return 0;
}
显然,当我作为程序运行时,它工作正常
$ ./test
Welcome
FOOBAR
FOOBAR
:)
会发生什么?我错过了任何争论吗
解决方案
添加setbuf(标准输出,0)
;第一次打印前
#include <stdio.h>
int main(int argc, char *argv[]){
setbuf(stdout, 0);
char buff[64];
char t[10];
printf("Welcome\n");
gets(t);
printf(t);
printf("\n");
gets(buff);
return 0;
}
#包括
int main(int argc,char*argv[]){
setbuf(标准差,0);
字符buff[64];
chart[10];
printf(“欢迎\n”);
获取(t);
printf(t);
printf(“\n”);
获得(buff);
返回0;
}
旁注1:get(t)代码>由于潜在的缓冲区溢出而不安全;使用fgets(t,sizeof(t),stdin)代码>取而代之<代码>获取(buff)出于同样的原因,代码>也不安全。旁注2:printf(t)
由于数据内容不可信而不安全;使用printf(“%s”,t)代码>替代,或使用printf(“%s\n”,t)
将其与printf(“\n”)组合代码>呵呵,这就是这个例子的目的。泄漏金丝雀和libc思想格式字符串漏洞,然后利用缓冲区溢出进行攻击。我的问题是另一个。试着调用fflush(stdout)在printf
调用后,或调用setlinebuf(stdout)
在第一个printf
之前设置stdout
流到行缓冲模式。添加setbuf(stdout,0);在第一次prinf之前,它工作正常。谢谢
$ ./test
Welcome
FOOBAR
FOOBAR
:)
#include <stdio.h>
int main(int argc, char *argv[]){
setbuf(stdout, 0);
char buff[64];
char t[10];
printf("Welcome\n");
gets(t);
printf(t);
printf("\n");
gets(buff);
return 0;
}