11

我正在浏览一些连接到端口 P 上的远程主机的源代码(使用 TCP)。调用连接后(假设成功),我想发现连接的客户端端口(即客户端端口)。事实上,我正在浏览 openssh 源代码,在 sshconnect.c 中,有一个函数 ssh_connect 调用 timeout_connect。我有远程主机 ip、端口、本地 ip,但想在成功连接后知道本地(客户端)端口。

我希望我已经清楚并感谢您的回答问候 Sapsi

4

2 回答 2

17

尝试将客户端套接字文件描述符提供给getsockname,类似这样

struct sockaddr_in local_address;
int addr_size = sizeof(local_address);
getsockname(fd, &local_address, &addr_size);

然后,您可以选择 IP 和端口的地址结构。

于 2010-03-02T01:35:08.040 回答
1

您可以使用 astruct sockaddr_in来保存客户的信息。此外,您可以使用该getsockname功能获取客户的当前地址。像这样:

struct sockaddr_in client;
socklen_t clientsz = sizeof(client);

[... after connect() ...]

getsockname(socket_descriptor, (struct sockaddr *) &client, &clientsz);

printf("[%s:%u] > ", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
                   /* client address                  client port      */

结果:

[127.0.0.1:58168] >(我在本地运行我的程序)

于 2021-05-19T12:03:35.427 回答