【发布时间】:2018-05-29 08:40:09
【问题描述】:
首先我必须提到,在这种情况下我没有任何专用服务器。但我知道服务器的IP。所以问题是如果客户端连接到那个IP,我怎么知道它使用哪个客户端IP?因为一个客户端可以有多个网络适配器,每个都连接到不同的网络。此外,服务器不需要与客户端在同一个局域网中,在客户端的数据包到达服务器之前可能需要几跳。我们知道服务器的IP,那么我们怎么知道客户端的IP呢?
因为我们没有专用服务器,所以我们无法通过某些服务器应用(某种客户端管理器)检测客户端的 IP。在这种情况下,Ping 类似乎也没有帮助,通常服务器也不必启用 ping。目前,服务器只是一个 SQL Server,客户端直接执行一些查询。我知道当客户端对我的 SQL Server 执行查询(使用sys.dm_exec_connections)时,我们可以获得客户端的 IP,但这对我来说只是最后的手段。我想直接从客户端找到另一种方式(不涉及 SQL Server)。
这是我可以遵循的最接近的方法,但我真的不知道为什么它选择最后一个地址?
var hn = System.Net.Dns.GetHostName();
var ipEntry = System.Net.Dns.GetHostEntry(hn);
IPAddress[] addr = ipEntry.AddressList;
var ip = addr[addr.Length - 1].ToString();//why the last?
无论如何,AddressList 中不包含许多 IP 地址(不直接在同一个 LAN 中)。
我的问题是在客户端(从客户端上的某个可用网络适配器开始)和服务器(事先知道 IP)之间查找所有可能的网络路径。在几乎情况下,应该只有 1 个可用路径(所以我们应该只找到 1 个客户端的 IP)。尝试从客户端发送一些请求可能需要找到路径,但我目前不知道如何完成。
【问题讨论】:
-
你当然可以让客户端到tracert,然后将该信息发送到服务器?或者如果是SQL,写入数据库?
-
仍然不明白您是否有服务器以及为什么需要这一切。无论如何,看看 NetworkInterface.GetAllNetworkInterfaces
-
@Evk 我的意思是我没有在服务器上运行任何我自己的应用程序(以便我可以管理连接的客户端),我所拥有的只是客户端直接查询的 SQL Server网络接口具有客户端可以选择路由到某个目标的所有可能 IP,在这种情况下,我想知道它必须使用的确切 IP(正如我在几乎所有情况下所说,应该只有 1 个 IP 和一个路径从客户端到目标)。
-
@john 是的,tracert 可能是我需要的,但看起来它需要服务器启用 ping(允许 ping)?
标签: c# .net networking network-programming system.net