使用 .NET,如果 PC 连接到 VPN 并使用 VPN 作为互联网网关,是否有办法检索 PC 的外部 IP?我的最终目标是检测客户端 PC 是否真的在网络上,或者它们是否在远程位置。
编辑:在阅读了其中一些答案后,我应该更具体一点。我想我正在寻找的是一种绕过 VPN 以检查笔记本电脑真实外部 IP 的编程方式。这可能吗?
使用 .NET,如果 PC 连接到 VPN 并使用 VPN 作为互联网网关,是否有办法检索 PC 的外部 IP?我的最终目标是检测客户端 PC 是否真的在网络上,或者它们是否在远程位置。
编辑:在阅读了其中一些答案后,我应该更具体一点。我想我正在寻找的是一种绕过 VPN 以检查笔记本电脑真实外部 IP 的编程方式。这可能吗?
此外,如果您在客户端,您可以在 Windows 上运行 ROUTE PRINT 并解析搜索 VPN 特定条目的输出。尝试在连接到 VPN 和直接连接时运行该命令并找出差异。除了物理适配器,您还应该看到一个 VPN 适配器和所有通过它的外部路由。如果您想绕过 VPN 以获取外部 IP,您可能会通过访问外部服务器来实现,您必须通过以太网适配器添加到该服务器的路由。但是我使用了阻止它的 VPN 客户端,这意味着所有流量都必须通过 VPN,所以这可能不适合你。
我不这么认为。但是,您可以通过检查您获得的 IP 是否已被大量使用或已知托管 VPN 服务器(您可以有一个列表)来检测客户端是否来自 VPN。
最简单的方法是分配特定于 VPN 的 IP 范围,然后测试内部 IP 是否在该范围内。
您无法直接检测到“真实”IP,但您可以通过查看特定于您的网络拓扑的因素来推断它们是否在网络上。
例如,本地网络上计算机的 ping 时间将与外部计算机大不相同。这不是 100% 完美的,但应该给你一个非常可靠的指标。
路由也可能不同(traceroute 是否为本地网络上的设备与远程设备显示不同的路由?)
如果您是服务器,例如 HTTP 服务器,则不能,因为 VPN 的主要目的之一是提供匿名性。机器通过 VPN 连接到互联网,所以除非客户端绕过 vpn 并将真实 IP 地址发送给您,否则您不能。
通常,当您连接到 vpn 时,您的子网 ip 与物理连接时的子网不同,但如果不是这种情况,您可以尝试运行 tracert 并获取响应,如果管理 vpn 的防火墙与提供网络连接的路由器不同,你明白了,只解析响应。
其他方法是使用 ip 获取适配器的名称,如果是你得到的 vpn 适配器。