CLIENT 的 IP 地址在此 $VAR 中:
VAR=$(nc -v -l 80 2>&1)
我可以进一步完善它。
如何将此 $VAR 发送回客户端
而不运行另一个 netcat 命令?
使用其他编程语言..
可以在发送响应之前获取IP。
因此可以包含在响应中。
netcat 不可能吗?
答案1
当然有可能。只需设置nc
为协进程即可:
#!/bin/bash -x
# Greets the client with their hostname.
coproc ( nc -l -v localhost 3000 2>&1 )
{
declare "$( sed -e 's/^Connection from \([^ ]*\).*$/client="\1"/' -e 'q' )"
printf 'Hello there, user on %s\n' "$client"
} <&${COPROC[0]} >&${COPROC[1]}
kill "$COPROC_PID"
对于更高级的东西,比如处理 HTTP 请求:
#!/bin/bash
# Handles one request, then kills nc and restarts
while true; do
coproc ( nc -l localhost 3000 2>&1 )
{
get_http_request_header
process_request
send_http_reply
} <&${COPROC[0]} >&${COPROC[1]}
kill "$COPROC_PID"
done
命令get_http_request_header
、
process_request
和
send_http_reply
可能是 shell 函数或您编写的单独脚本。
该get_http_request_header
例程将从连接的客户端获取其标准输入nc
,并解析请求,可能将其存储在临时文件中或设置一些全局变量或以其他方式将所需信息传递给process_request
.
process_request
可以以任何必要的方式处理编译结果。
send_http_reply
只需写入标准输出即可打印到客户端。
另一种可能的设置是,服务器端的信息只是通过管道沿着内部步骤传递:
#!/bin/bash
# Handles one request, then kills nc and restarts
while true; do
coproc ( nc -l localhost 3000 2>&1 )
{
get_http_request_header |
process_request |
send_http_reply
} <&${COPROC[0]} >&${COPROC[1]}
kill "$COPROC_PID"
done
答案2
这个问题已经得到解答或者在netcat 连接成功时显示欢迎消息
但本质上,您将对侦听器执行以下操作:
(echo "$VAR"; cat) |nc -nvlp 4444
当您的客户端连接时,侦听器会将此变量回显到客户端的标准输出上。