有没有办法在连接到VPN时检测计算机的真正外部IP?

时间:2012-08-07 15:38:57

标签: c# .net vb.net networking vpn

使用.NET,如果它们连接到VPN并使用VPN作为互联网网关,有没有办法检索PC的外部IP?我的最终目标是检测客户端PC是否真正在网络上,或者它们是否位于远程位置。

编辑:在阅读了其中一些答案后,我应该更加具体一点。我想我正在寻找的是一种绕过VPN来检查笔记本电脑真正外部IP的编程方式。这可能吗?

6 个答案:

答案 0 :(得分:1)

我不这么认为。但是,您可以检查客户端是否来自VPN,方法是检查您获得的IP是否已被大量使用,或者是否知道托管VPN服务器(您可以拥有一个列表)。

答案 1 :(得分:1)

此外,如果您在客户端,则可以在Windows上运行ROUTE PRINT并解析输出以搜索VPN特定条目。尝试在连接到VPN时运行命令,并在直接连接时查找差异。除物理适配器外,您应该看到VPN适配器以及通过它的所有外部路由。如果您想绕过VPN以获取外部IP(您可能通过访问和外部服务器执行此操作),则必须通过ethenet适配器添加到该服务器的路由。但是我使用了阻止它的VPN客户端,这意味着所有流量必须通过VPN,所以这可能不适合你。

答案 2 :(得分:0)

最简单的方法是为VPN分配一系列特定的IP,然后测试内部IP是否在该范围内。

答案 3 :(得分:0)

您无法直接检测“真实”IP,但您可以通过查看特定于网络拓扑的因素来推断它们是否在网络上。

例如,本地网络上的计算机的ping时间与外部计算机的ping时间大不相同。这不是100%完美,但应该给你一个非常可靠的指标。

路由也可能不同(traceroute是否显示本地网络上设备与远程设备的不同路由?)

答案 4 :(得分:0)

如果您是服务器,比如HTTP服务器,则不能,因为VPN的主要目的之一是提供匿名性。机器通过VPN上网,所以除非客户端绕过vpn并向你发送真实的ip地址,否则你不能。

答案 5 :(得分:0)

通常当你连接到一个vpn时,你有一个子网的ip,当你进行虚拟连接时,它的子网不同,但如果不是这样,你可以尝试运行一个跟踪响应,如果管理vpn的防火墙与提供网络连接的路由器不同,那么你就得到它,只解析响应。

其他方法是使用ip获取适配器的名称,如果是你得到它的vpn适配器。