How do I get a client's IP address from behind a load balancer?

Does this work:

((IPEndPoint)tcpClient.Client.RemoteEndPoint).Address.ToString()

If the client is connecting to you via an internal network I am not sure you can get their public IP since the connection to get back to the client would not need that information.


It sounds like perhaps your server is behind a load balancer or router using NAT. In this case, the IP packet won't have the originating client's address, but the address of the NAT router. Only the NAT router knows the sender's address (on an IP level).

Depending on whatever higher-level protocol you might be using on top of TCP, you may be able to get client identification from that, although it's much easier to spoof such information at higher levels, if that may be a concern.

If you need this data only for research purposes, your NAT device may keep a log.

If it's a requirement that you get the true originating IP packet in real time, you may have to have to reconfigure your router or have your server moved to the DMZ, but that's a whole nother ball of wax. Talk to your network guys, as they would certainly know more about this than I (I'm not a network expert).


Simply use the connection socket object of Socket class which you have used to accept the client.

connectionSocket.RemoteEndPoint.toString();

Tags:

C#

.Net

Tcpclient