Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.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 “怎么可能?”;接受;为传入套接字提供了错误的IP地址?_C_Linux_Sockets_Tcp - Fatal编程技术网

C “怎么可能?”;接受;为传入套接字提供了错误的IP地址?

C “怎么可能?”;接受;为传入套接字提供了错误的IP地址?,c,linux,sockets,tcp,C,Linux,Sockets,Tcp,我的一个套接字出现了问题,它的ip地址似乎有误。 具体来说,它从一个IP接收数据,但将数据发送到另一个IP。 运行代码的相关部分如下所示: struct sockaddr_in address; socklen_t length = sizeof(address); int FileHandle = accept(listen_sock->socket, (struct sockaddr*) &address, &length); if (conn == -1) {

我的一个套接字出现了问题,它的ip地址似乎有误。 具体来说,它从一个IP接收数据,但将数据发送到另一个IP。 运行代码的相关部分如下所示:

struct sockaddr_in address;
socklen_t length = sizeof(address);

int FileHandle = accept(listen_sock->socket, (struct sockaddr*) &address, &length);

if (conn == -1) {
    printf("accept failed\n");
    return;
}

struct socket_data * connect = malloc(sizeof(struct uid_sock_data));
connect->socket = FileHandle;
connect->IP = address.sin_addr.s_addr;

if (!(connect->ssl = ssl_accept(SecurityContext, connect->socket))){
    printf("security handshake failed to ip:%d\n", connect->IP);
    close(connect->socket);
    free(connect);
    return;
}
printf("Success\n");
tcpdump显示一个tcp数据包,其中二进制数据来自一个IP地址,确认数据包(无数据)输出到同一IP地址。然后,一个包含SSL证书数据的数据包被发送到另一个IP地址(该数据包未被确认),并打印“安全握手失败”消息,显示第二个IP地址,从该地址未收到任何请求

第二个IP地址属于最后一个成功连接的客户端,但那是12个多小时前的事了,而且那台计算机现在还没有开机。软件在启动前正确运行了三天。对我应该寻找的东西有什么建议吗?怎么能“接受”给我错误的IP地址


另外,这是在linux Ubuntu12.04下运行的。

address.sin\u addr.S\u addr中的ip地址是按网络字节顺序排列的——在将其分配给connect->IPConnect->ip之前,您可能必须将其转换为主机顺序,这严格用于报告目的,请注意,它不会传递给失败的ssl\u accept子例程(无响应)。它只是为了提供信息(尽管将此输出与tcpdump进行比较确实需要一些算术转换)。