2012-01-11 48 views
0

背後服務器最近,我開始在Windows玩弄插座和我遇到了一點麻煩.. 我有,我想找到DNS名稱解析主機的應用程序(通過互聯網連接)。解析DNS的Winsock,與路由器

該程序設法將DNS名稱解析爲IP地址,但其找到的IP地址是位於運行服務器應用程序的計算機前的路由器之一(這正是我所期望的,因爲它是默認網關)..

我的問題是,如果有一種方法來連接到服務器應用程序,而不必每次手動修改路由器的設置時,服務器應用程序安裝在路由器坐在系統上在它的前面..或者是以這種方式將計算機的端口轉發到路由器的唯一方法?

任何幫助表示讚賞! Thnx!

回答

2

如果服務器位於路由器後面,則必須將路由器配置爲端口轉發。沒有得到解決。路由器需要知道其網絡上的哪臺機器將傳入的客戶端請求轉發給任何給定的端口。但是,根據路由器及其功能的類型,服務器應用程序可能可以使用uPNP或SNMP(如果可用並啓用)來可編程地配置端口轉發。否則,路由器必須由路由器管理員手動配置。

+0

謝謝,非常有用!有什麼辦法來確定服務器是否在路由器形式的C++後面? (所以它只會嘗試自動轉發端口,如果它位於路由器後面)。 – elephantintheroom 2012-01-11 00:23:41

+0

沒有完美的方法。但是您可以檢查本地IP地址是否在RFC1918空間中(例如192.168.x.y,10.x.y.x等)。如果是這樣,你絕對是在NAT之後。如果不是,你可能不是。 – 2012-01-11 01:20:28

+0

我會讓服務器應用程序使用外部IP報告服務(例如'http:// iplookup.flashfxp.com','http:// automation.whatismyip.com/n09230945.asp'等查詢機器的公共IP ),然後檢索本地計算機的可用IP列表(使用'GetAdaptersInfo()'或'GetAdapterAddresses()'),然後檢查報告的IP是否在該列表中找到。如果不是,那麼服務器機器並不直接連接到互聯網(但這並不一定意味着它在路由器後面,它可能在代理或ICS的後面)。 – 2012-01-11 01:44:04