NetCat:用他们的 IP 响应客户端?

NetCat:用他们的 IP 响应客户端?

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_headerprocess_requestsend_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

当您的客户端连接时,侦听器会将此变量回显到客户端的标准输出上。

相关内容