的Winsock只接受来自同一台计算机的连接,但不能从同一网络

问题描述:

所以我一直在这个指南
http://www.binarytides.com/winsock-socket-programming-tutorial/
要建立在C一个简单的TCP服务器下面,这是我想出了代码:
https://pastebin.com/CDxiLv3b
的Winsock只接受来自同一台计算机的连接,但不能从同一网络

int c; 
char client_message[2000]; 
int recv_size; 
printf("\nInitialising Winsock..."); 
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) 
{ 
    printf("Failed. Error Code : %d", WSAGetLastError()); 
    return 1; 
} 

printf("Initialised.\n"); 

//Create a socket 
if ((server_socket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) 
{ 
    printf("Could not create socket : %d", WSAGetLastError()); 
} 

printf("Server Socket created.\n"); 

memset(&server_addr, 0, sizeof(server_addr)); 
//Prepare the sockaddr_in structure 
server_addr.sin_family = AF_INET; 
server_addr.sin_addr.s_addr = INADDR_ANY; 
server_addr.sin_port = htons(port); 

//Bind 
if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == SOCKET_ERROR) 
{ 
    printf("Bind failed with error code : %d", WSAGetLastError()); 
} 

printf("Bind to port %d done.\n", port); 

//Listen to incoming connections 
listen(server_socket, 3); 

//Accept and incoming connection 
puts("Waiting for incoming reverse shell..."); 

c = sizeof(struct sockaddr_in); 
while ((client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &c)) != INVALID_SOCKET) 
{ 
    puts("Connection accepted"); 
    if ((recv_size = recv(client_socket, client_message, 2000, 0)) == SOCKET_ERROR) 
    { 
     puts("recv failed"); 
     break; 
    } 
    client_message[recv_size] = '\0'; 
    strcpy_s(path, MAX_PATH_LEN, client_message); 
    break; 
} 

if (client_socket == INVALID_SOCKET) 
{ 
    printf("accept failed with error code : %d", WSAGetLastError()); 
    return 1; 
} 

return 0; 


(是的,我basicly复制和改变的东西)
现在的问题是,我只能连接到这台服务器使用相同的连接,我不能使用网络中的不同计算机连接到它,即使我打开端口(实际上应该不重要),它不会接受来自我网络上不同计算机的连接(仅来自同一台计算机)

+0

定义'不起作用'。 – EJP

+0

什么接口(IP)是程序监听(你可以用netstat检查)以及你使用哪个IP从另一台机器连接? – Juan

+0

将无法​​正常工作意味着它不会接受来自网络中其他计算机的连接我现在将测试它(ip列表的东西),并在我的本地计算机(它工作的地方)和我网络中的其他计算机上使用我的本地ip (10.0.0.14) – NacOJerk

我只需要在防火墙上打开端口

+0

你可以很好地接受你自己的答案。 – alk