2012-03-14 79 views
79

我想在一個UDP數據包只發送一個短的價值,但在運行命令如何只使用netcat發送一個UDP數據包?

echo -n "hello" | nc -4u localhost 8000 

我可以看到服務器獲取你好東西,但我必須按按Ctrl + Ç退出netcat命令。

我怎樣才能使它發送你好後退出?


對不起,噪音,我重新閱讀手冊頁,發現-q選項。

echo -n "hello" | nc -4u -q1 localhost 8000 

作品(它在1秒後退出)。

出於某種原因,它不與-q0工作。

+0

手冊頁標準輸入EOF後,等待指定的秒數,然後退出。如果秒是負數,請永遠等待。' – luckydonald 2016-07-16 20:20:13

回答

41

我沒有找到我的netcat的-q1選項。相反,我使用-w1選項。下面是bash腳本我做了一個UDP數據包發送到任何主機和端口:

#!/bin/bash 

def_host=localhost 
def_port=43211 

HOST=${2:-$def_host} 
PORT=${3:-$def_port} 

echo -n "$1" | nc -4u -w1 $HOST $PORT 
+4

謝謝,對於我在OSX上'-w0'也能正常工作。 – SimonW 2014-04-18 11:03:00

+0

OS X的工作原理是:「echo -n」test「| nc -4u -w0 localhost 9999」,因爲SimonW說 – 2017-08-28 17:12:31

136

如果你正在使用bash,你還不如寫

echo -n "hello" >/dev/udp/localhost/8000 

,並避免所有的特質和不兼容性的netcat。

這也適用於發送到其他主機,例如:

echo -n "hello" >/dev/udp/remotehost/8000 

這些都不是文件系統的「真實」的設備,但打擊「特殊」 aliases

+1

這是不正確的。它不僅限於Linux。 – 2013-09-06 18:07:13

+5

是的,它適用於帶有bash的OS X。 – 2013-09-06 21:23:44

+10

好吧,你是對的,讓我明確表示這不適用於ZSH。 – jturolla 2013-09-15 20:50:47

4

Netcat的發送每換行符一個分組。所以你很好。如果你做更復雜的事情,那麼你可能需要別的東西。

當我意識到這一點,我打打鬧鬧使用Wireshark。不知道它是否有幫助。

+3

我認爲這隻對TCP正確。使用UDP,它將在一個數據包中發送多行(如果適合的話)。 – sleske 2014-08-28 07:44:54

4

在當前的netcat(V0.7.1)你有一個-c開關:

-c, --close    close connection on EOF from stdin 

因此,

echo "hi" | nc -cu localhost 8000 

應該做的伎倆。 `-q秒:在Debian

+0

需要注意的是,這僅適用於GNU netcat,但不適用於BSD netcat。 – MarSoft 2018-03-07 12:25:30