我正在嘗試使用netcat來模擬NAT穿越協議。使用netcat發送一個UDP數據包而無需綁定
我有一個實例正在監聽UDP包在端口6666,像這樣:
NC -ul 6666
在另一個終端窗口,我想定期從端口6666發送一個UDP包(打開我的路由器上的返回路徑。這將是在重複每20秒重新打開端口的腳本)
NC -u -p6666 mypinghost.com 4444
的問題是失敗的netcat在此消息的ping通話上:
NC:綁定失敗:地址已在使用
這意味着聽衆已經綁定到端口6666是從該端口發送,或者可能是netcat的是試圖綁定到6666聽阻塞另一個進程。
這是netcat的寫法嗎,或者我可以通過某種方式讓它發癢,讓我發送一個沒有綁定到端口的數據包來偵聽?
我有這個相同的問題,我想SO_REUSEADDRESS避免了這個錯誤。但是,然後返回消息不會被偵聽進程拾取 - 除非在發送進程綁定端口後啓動它。我的理解是,該選項用於「多播」(我不認爲是我的情況),但有辦法使用它,所以發送到端口6666的消息去到想要接收它們的進程,而不是最新的過程來綁定端口? – Edmund 2012-09-02 08:24:43
@Edmund消息應該發送到從該端口接收的所有進程。 – EJP 2012-09-02 10:36:40
「正在接收的進程」,你的意思是那些綁定它的,或者那些調用'recvfrom'的?恰巧,UDP數據報似乎只能被最近的綁定過程可靠地獲取。即使該進程從不調用'recvfrom',它仍然阻止另一方接收任何東西。但是這個評論討論越來越擁擠,所以我會問一個單獨的問題並且包含我的代碼,除非你能想到一些簡單的東西,可能我錯過了。 ;-) – Edmund 2012-09-02 11:08:15