2009-12-15 40 views
2

如何獲取VC++中的空閒端口號列表?如何獲取VC++中的空閒端口號列表?

ASLO我想請檢查是否用戶定義的端口號是免費的或不?

+0

什麼樣的端口號? TCP? UDP? – 2009-12-15 06:49:27

+0

「免費」是什麼意思?如果你的意思是檢查它是否被採用,那麼提到netstat的答案是朝着正確方向邁出的一步。如果你想確定一個端口是否被阻塞,那麼沒有特定的方法。你將不得不通過發送數據來測試你的目標端口。 – 2009-12-15 06:52:42

+0

它的TCP ,,,,但我怎麼能預定它編號 – 2009-12-15 06:57:14

回答

1

(我假設你在談論的TCP/IP端口)

不過是沒有這樣的東西作爲免費的端口號的列表。但是像netstat.exe(我喜歡使用netstat /a /n /p tcp)這樣的實用程序會給你一個使用的端口號列表。空閒端口號是所有未使用的介於1和65535之間的端口號。

如果你能使用的端口號該列表程序,你的問題就解決了。如果我真的真的硬起來,我會捕獲從netstat輸出並解析它。

更新:

(維基百科)http://en.wikipedia.org/wiki/Netstat

在Windows平臺上,netstat的信息,可以通過調用GetTcpTable和GetUdpTable功能IP幫助API中進行檢索,或者IPHLPAPI.DLL。返回的信息包括本地和遠程IP地址,本地和遠程端口以及(用於GetTcpTable)TCP狀態代碼。除Windows附帶的命令行netstat.exe工具外,還有可用的基於GUI的netstat程序。

還有維基百科文章中一些有用的信息。 stati返回的一個很好的解釋也在這裏:http://commandwindows.com/netstat.htm

2

只有這樣,才能知道某個端口號是否是「免費」是實際嘗試bind()它。

回想一下,端口號僅僅意味着在一個特定的接口地址的背景下東西,所以兩個程序可以在「相同」的端口號來監聽(但在不同的地址)。此外,可能有多種原因可能導致特定程序不允許在特定端口上偵聽,包括本地防火牆策略或ACL或任何其他可能的原因。

假設您想要監聽傳入連接,只需嘗試bind()即可找到感興趣的地址和端口,並且根據應用程序是否可以偵聽該端口,您將收到錯誤或不收到錯誤。

+0

對於單個端口(或少數幾個),這很簡單,方便且快速。要獲得免費端口列表(無論他想要什麼?)需要這樣做64K次,這在合理的時間內我看不到。 – 2009-12-15 07:57:26

+0

的確如此。我更關注問題的後半部分,因爲第一部分似乎是回答第二部分的可能方法。 – 2009-12-15 08:15:57

相關問題