无法pipe道回声到netcat?

我有以下命令:

echo 'HTTP/1.1 200 OK\r\n' | nc -l -p 8000 -c

当我curl localhost:8000我没有看到HTTP / 1.1 200 ..正在打印。

我使用netcat 0.7.1在mac os x上

有任何想法吗?

 #!/bin/bash trap 'my_exit; exit' SIGINT SIGQUIT my_exit() { echo "you hit Ctrl-C/Ctrl-\, now exiting.." # cleanup commands here if any } if test $# -eq 0 ; then echo "Usage: $0 PORT" echo "" exit 1 fi while true do echo "HTTP/1.1 200 OK\r\n" | nc -l -p ${1} -c done 

并testing:

curl localhost:8000

你的方法有多个问题。

逃逸序列

除非使用-e开关,否则转义序列不受尊重。

 echo -e 'HTTP/1.1 200 OK\r\n' 

没有-e ,你是逐字地发送反斜杠和字母。 以上内容形成一个完整的HTTP状态行。

协议

地位线本身并不构成回应。 格式需要两个CRLF

  1. 一个作为状态行本身的一部分
  2. 一个来终止respnse头

尝试这个

 echo -e 'HTTP/1.1 200 OK\r\n\r\n' 

netcat调用

-c标志是错误的,因为它需要一个命令参数。

 echo -e 'HTTP/1.1 200 OK\r\n\r\n' | nc -l -p $port 

内容

即使这样, curl也会在收到回复后阻塞,因为它正在等待服务器提供一个body。 你可以发送更多的数据给nc ,或者select一个更合适的答案。

 echo -e 'HTTP/1.1 204 No content\r\n\r\n' | nc -l -p $port 

请注意, curl将打印它收到的东西 – 什么也没有。 试试curl -v来看看发生了什么。

我注意到你是单引号在你的echo语句中发送的string。 因此,\ r和\ n是逐字发送的,而不是Newline和Return的代码。 尝试将回声切换到双引号(“)。

您可以使用以下validation

  echo 'whatever\r\n' | od -cb echo "better\r\n" | od -cb 

没有线路terminal,NC程序可能不会将线路传输到目的地。

只是,

 netcat -l -c "printf 'HTTP/1.1 200 OK\r\n'" -p 8000 

printf将“\ r”和“\ n”解释为转义序列。 echo不。