2013-03-10 49 views
4

這個問題是以下這一項:Sockets working in openSUSE do not work in Debian?Netcat的:用NC -l端口號,而不是NC -l -p端口號

當我的Debian系統上的插座的工作,我不得不使用NC -l -p端口號來模擬我想要與之通話的服務器。如果我使用nc -l port_number,則在使用套接字連接功能時會失敗,並且strerror(errno)會說「連接被拒絕」。

不帶-p選項的Netcat在其他Linux發行版上運行良好,我應該在配置中更改哪些內容?

回答

4

我duskwuff同意,最好是隻使用-p選項無處不在,但回答你的問題:

你必須做的一件事就是安裝一個支持你想要的語法的netcat。我知道netcat-openbsd包支持它。我知道netcat-traditional包沒有。還有一個netcat6包,這也沒有。然後,您可以明確要求的netcat的OpenBSD的版本,像這樣:

nc.openbsd -l 4242 

可選方案,您可以使用替代系統來設置這個版本的netcat的運行時發出的nc命令:

update-alternatives --set nc /bin/nc.openbsd 

這將會自動完成,如果這是你安裝的唯一的netcat。

最後,您可以再選擇性地刪除您不喜歡的netcat(netcat-traditionalnetcat6)。

+0

很好的回答!我將使用-p選項,但是我已經安裝了netcat-openbsd軟件包以解決netcat-traditional問題。 我試過netcat6,它應該只是添加IPv6協議並根據手冊頁來增強UDP。-n選項仍然需要使用nc6,但明確表示: bapt @ debian:〜$ nc6 -l 4242 nc6:在監聽模式下,您必須使用-p開關 – baptx 2013-03-10 13:10:28

+0

@baptx指定一個端口,感謝您的信息netcat6。我將它添加到我的答案中。 – 2013-03-10 16:33:03

6

不要調整你的設置。那裏有多個netcat的實現;並不是所有人都表現得一樣。

特別是,如果您省略了-p(「端口」)標誌,那麼netcat的「傳統」版本(可能是您安裝在Debian系統上的版本)最終會做一些完全意想不到的事情:將最後一個參數當作主機名,將其傳遞給inet_aton(),將其轉換爲無意義的IP地址(例如,1234將變爲0.0.4.210),然後繼續忽略該IP地址並在套接字上偵聽一個自動分配的(可能是隨機的)端口號。

這種行爲顯然很愚蠢,所以netcat的其他一些實現會假定你的意思是-p。但是,您正在使用的那個不會,因此通過-p選項。

+0

感謝您解釋這是由於我的系統實施。我將使用-p選項來指定端口。我仍然希望解決這些問題,以確保未來不會有任何意外。這就是爲什麼我安裝了netcat-openbsd並且沒有必要調整我的設置,update-alternatives已自動切換到nc.openbsd;)順便說一下,似乎netcat-traditional不支持IPv6 – baptx 2013-03-10 13:23:04

+0

cygwin有一個BSD nc實現(不確定版本),說不使用-p和-l ..所以我想也許你不能總是這樣做--p在正確使用的意義上是「安全」..「-p source_port 指定nc應該使用的源端口....這是一個 錯誤,使用此選項與-l 選項一起使用。「 – barlop 2016-05-01 02:04:28