提问人:rabbit 提问时间:10/14/2023 更新时间:10/14/2023 访问量:52
Wireshark 显示 CR 从我的服务器应用程序发送到客户端,但我的程序将 CR 发送到与客户端不同的 IP/端口
Wireshark shows CR being sent to a client from my server app but my program sends a CR to a different IP/Port than the client
问:
我有一个简单的 linux ansi c 套接字程序,它基本上侦听 tcp 端口 (infd),接受来自一个保持连接的输入设备的连接(不是我的选择),然后逐字节读取数据,并在适当的时候将其写入第三个设备 (outfd)。第三种设备要求在每个命令后发送回车。它唯一一次写回输入设备是当它收到“空闲”消息时,我在程序的主循环中写回以下响应。
unsigned char idle[3];
idle[0]=0xF1;
idle[1]=0x00;
idle[2]=0xFF;
//idle message TCP only xF1x00xFF
if(recieved==0xF1){
res = read(infd,&recieved,1);
res = read(infd,&recieved,1);
res = write(infd,idle,3);
}
我唯一写回车符的地方发生在一个单独的函数中,因此文件描述符是一个局部变量。
int sendOutput(unsigned char *data, struct sockaddr_in *outaddr){
int n,outfd;
if ((outfd = socket(AF_INET, SOCK_STREAM, 0)) <0) {
fprintf(errorfd,"ERROR creating output socket to send out\n");
fclose(errorfd);
return(FALSE);
}
if (connect(outfd, (struct sockaddr *)outaddr, sizeof(*outaddr)) < 0) {
fprintf(errorfd,"ERROR connecting to out server (%i) %s \n",errno,strerror(errno));
fflush(errorfd);
}
else{
n = write(outfd, data, strlen(data));
if (n < 0) {
fprintf(errorfd,"ERROR writing to out server (%i) %s\n",errno,strerror(errno));
fflush(errorfd);
}
write(outfd,"\r",1);
n=read(outfd,data,9); //read back commandline prompt but do nothing with it
}
shutdown(outfd,SHUT_WR);
close(outfd);
return(TRUE);
}
当我运行数据包跟踪时,我看到一个回车符 (x0d) 从我的设备发送到客户端设备,但我的代码只发送我上面列出的写入。客户端设备的制造商“声称”CR 给他们带来了问题。
我已经检查过,回车来自我的 IP / MAC,所以我不相信它是另一个带有欺骗 IP 发送它的设备。
任何想法如何实现?
输出设备正在接收数据和 CR,因此我完全不知道输入设备是如何发送回车的。outfd 是一个套接字,在 sperate 函数中打开、写入和关闭。数据按预填充套接字结构传入(IP 和端口与 infd 套接字不同)。
答: 暂无答案
评论
data
read
sendOutput
data
sendOutput
return
read