【问题标题】:Winsock only accepts connection from the same computer, but not from the same networkWinsock 只接受来自同一台计算机的连接,但不接受来自同一网络的连接
【发布时间】:2018-01-05 09:42:45
【问题描述】:

所以我一直在关注本指南
http://www.binarytides.com/winsock-socket-programming-tutorial/
要在 c 中创建一个简单的 tcp 服务器,这是我想出的代码:
https://pastebin.com/CDxiLv3b

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;


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

【问题讨论】:

  • 定义“不起作用”。
  • 程序在哪个接口(ip)上监听(你可以用netstat检查),你用哪个ip从另一台机器连接?
  • 不会工作意味着它不会接受来自网络中其他计算机的连接我现在将测试它(ip 列表的东西)以及我的本地计算机(它工作的地方)和另一台计算机我的网络我使用我的本地 ip (10.0.0.14)
  • 没有。 'Won't work' 意味着客户端出现错误。这是什么?
  • @Juan ,它显示在 10.0.0.14:25565 (我使用 mc 端口因为我已经打开了端口)

标签: c tcp winsock winsock2


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多