您能从连接的TCP套接字确定源IP和端口吗?
我想让我的服务器从连接的TCP套接字确定客户端的源IP和端口。因为我的客户可能是NAT的幕后黑手,所以我不能指望客户告诉我(在连接协议中)。。。如果这是可能的,我将需要在Windows和Linux上实现它。。。但这两个问题的答案都能帮助我开始您能从连接的TCP套接字确定源IP和端口吗?,c,sockets,msvcrt,libc,C,Sockets,Msvcrt,Libc,我想让我的服务器从连接的TCP套接字确定客户端的源IP和端口。因为我的客户可能是NAT的幕后黑手,所以我不能指望客户告诉我(在连接协议中)。。。如果这是可能的,我将需要在Windows和Linux上实现它。。。但这两个问题的答案都能帮助我开始 我正在使用C,我正在寻找基于libc或msvcrt的解决方案。如果您的客户机在NAT后面,则无法检测远程IP。如果您尝试这样做,您将始终获得NAT ip。我知道的唯一方法是将客户端IP与请求一起发送到服务器(作为请求的一部分) 但是你不清楚你想要什么。你没
我正在使用C,我正在寻找基于libc或msvcrt的解决方案。如果您的客户机在NAT后面,则无法检测远程IP。如果您尝试这样做,您将始终获得NAT ip。我知道的唯一方法是将客户端IP与请求一起发送到服务器(作为请求的一部分)
但是你不清楚你想要什么。你没有告诉我们你在使用什么语言,也没有告诉我们你在谈论什么样的服务器。这将阻止我们给你一个有用的答案 如果您的客户端位于NAT后面,则无法检测远程IP。如果您尝试这样做,您将始终获得NAT ip。我知道的唯一方法是将客户端IP与请求一起发送到服务器(作为请求的一部分)
但是你不清楚你想要什么。你没有告诉我们你在使用什么语言,也没有告诉我们你在谈论什么样的服务器。这将阻止我们给你一个有用的答案 如果对方支持NAT,您可以谈论两个不同的IP(您的问题不清楚您想要哪一个):
- 内部网络中对等方的IP(例如192.168.1.2)李>
- NAT本身的外部IP
在后一种情况下,您可以只问TCP/IP堆栈:您是如何做到的。如果对等方在NAT后面,您可以谈论两个不同的IP(您的问题不清楚您想要哪一个):
- 内部网络中对等方的IP(例如192.168.1.2)李>
- NAT本身的外部IP
在后一种情况下,您只需询问TCP/IP堆栈:您是如何做到这一点的。应该在linux和windows中都能工作:
struct sockaddr_in addr;
socklen_t len;
len = sizeof addr;
getpeername(clientSocket, (struct sockaddr*)&addr, &len);
printf("Remote IP address: %s\n", inet_ntoa(addr.sin_addr));
应能在linux和windows中工作:
struct sockaddr_in addr;
socklen_t len;
len = sizeof addr;
getpeername(clientSocket, (struct sockaddr*)&addr, &len);
printf("Remote IP address: %s\n", inet_ntoa(addr.sin_addr));
可能重复?可能重复?他在哪里说他想要ipv6解决方案?他在哪里说他不想要?这只是需要注意的一点——我把这个答案投了赞成票(不合格的“IP”对我来说是IPv4或IPv6)。他在哪里说他想要IPv6解决方案?他在哪里说他不想要?这只是需要注意的一点——我对这个答案投了赞成票(不合格的“IP”对我来说是IPv4或IPv6)。