【问题标题】:Resolving DNS with winsock, with server behind router用winsock解析DNS,服务器在路由器后面
【发布时间】:2012-01-11 00:04:31
【问题描述】:

我最近开始在 Windows 中使用套接字,但遇到了一些麻烦.. 我有一个应用程序,我想找到一个具有 DNS 名称解析的主机(通过 Internet 连接)。

该程序设法将 DNS 名称解析为 IP 地址,但它找到的 IP 地址是位于运行服务器应用程序的计算机前面的路由器之一(这是我所期望的,因为它是默认网关)..

我的问题是,是否有一种方法可以连接到服务器应用程序,而无需每次将服务器应用程序安装在前面有路由器的系统上时手动修改路由器的设置。或者是以某种方式将计算机端口转发到路由器的唯一方法?

感谢任何帮助! 谢谢!

【问题讨论】:

    标签: c++ networking dns client-server winsock


    【解决方案1】:

    如果服务器位于路由器后面,则必须为路由器配置端口转发。没有办法解决这个问题。路由器需要知道其网络上的哪台机器将传入的客户端请求转发到任何给定端口。但是,根据路由器的类型及其功能,服务器应用程序可能能够使用 uPNP 或 SNMP(如果可用并启用)以可编程方式配置端口转发。否则,路由器必须由路由器管理员手动配置。

    【讨论】:

    • 谢谢,很有用!有什么方法可以确定服务器是否位于 c++ 的路由器后面? (这样它只会在路由器后面时尝试自动转发端口..)
    • 没有完美的方法。但是可以检查本地IP地址是否在RFC1918空间(如192.168.x.y、10.x.y.x等)。如果是,那么您肯定落后于 NAT。如果不是,你可能不是。
    • 我会让服务器应用程序使用外部 IP 报告服务(例如 http://iplookup.flashfxp.comhttp://automation.whatismyip.com/n09230945.asp 等)查询机器的公共 IP,然后检索本地机器的可用 IP 列表(使用GetAdaptersInfo()GetAdapterAddresses()),然后检查是否在该列表中找到报告的 IP。如果不是,则服务器计算机没有直接连接到 Internet(但这并不一定意味着它位于路由器后面。它可能位于代理或 ICS 后面)。
    猜你喜欢
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 2016-04-19
    • 2023-03-16
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多