开发者

Get the client port (in C) after a call to connect

开发者 https://www.devze.com 2022-12-21 10:48 出处:网络
I am browsing some source code which connects to a remote host on por开发者_高级运维t P(using TCP). After the call to connect,(assuming successful), I would like to discover the client port of the con

I am browsing some source code which connects to a remote host on por开发者_高级运维t P(using TCP). After the call to connect,(assuming successful), I would like to discover the client port of the connection (i.e the client port). In truth, I'm browsing the openssh source, in sshconnect.c, there is a function ssh_connect which calls timeout_connect. I have the remote host ip,port, local ip but would like to know the local (client) port after a successful connect.

I hope I have been clear and thank you for your answers Regards Sapsi


Try feeding the client socket file descriptor to getsockname, something like so

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

Then you can pick apart the address structure for the IP and port.


You can use a struct sockaddr_in to hold client's info. Also, you can use the getsockname function to get your client's current address. Like this:

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      */

Result:

[127.0.0.1:58168] > (I was running my program locally)

0

精彩评论

暂无评论...
验证码 换一张
取 消