use*_*437 10 networking linux tcp netcat
我可以执行以下操作以在 netcat 中发送二进制数据:
echo -e '\x80' | nc host port
Run Code Online (Sandbox Code Playgroud)
但我不想这样做,我想要的是连接到服务器:
nc 192.168.1.115 12345
Run Code Online (Sandbox Code Playgroud)
然后发送一些文本:
aaaaaaaaaabbbbbbbbbbccccccccccc
Run Code Online (Sandbox Code Playgroud)
然后发送一些二进制数据:
0x80 0xF4 0x12
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
注意:在遵循此解决方案时,除非另有说明,否则请在单个 shell 会话中键入命令(或使用单个脚本)。这是因为它使用变量和文件描述符,它们在原始会话之外不能直接使用。
创建临时fifo。创建临时文件的正确方法是使用mktemp
. 不幸的是,它不能创建先进先出。它可以创建一个临时目录:
tmpd=`mktemp -d`
tmpf="$tmpd"/fifo
mkfifo "$tmpf"
printf "%s\n" "$tmpf" # just to know the path to the fifo, it may be useful later
Run Code Online (Sandbox Code Playgroud)
或者,您可以在某个固定或临时位置手动创建一个命名的 fifo。由你决定。
创建一个后台进程,它将读取 fifo 并将数据传递给服务器:
nc 192.168.1.115 12345 < "$tmpf" &
ncpid=$! # PID may be useful later
Run Code Online (Sandbox Code Playgroud)
注意如果nc
没有过早退出。假设连接本身和服务器都没有问题,上面的后台命令将保持连接,直到您完成通过 fifo 发送第一组数据。但是您希望它保持打开状态并接受多次写入,因此请打开 fifo 并且不要关闭它(还):
exec 3> "$tmpf"
Run Code Online (Sandbox Code Playgroud)
现在您可以通过 fifo 发送您喜欢的任何内容,并且后台连接仍然存在:
echo abcd >&3 # sends text
echo -e '\x80' >&3 # sends "binary"
cat /etc/issue >&3 # sends file
cat >&3 # type whatever you want, terminate with Ctrl+D
Run Code Online (Sandbox Code Playgroud)
&3
只要您知道路径,就可以使用 fifo 的路径而不是 来调用这些命令中的任何一个。知道路径后,您可以从同一个或另一个shell 会话写入 fifo :
cat > /path/to/the/fifo # type whatever you want, terminate with Ctrl+D
Run Code Online (Sandbox Code Playgroud)
或者,您可以以与原始会话类似的方式在另一个会话中打开描述符。无论您以何种方式写入 fifo,nc
都将通过单个连接将其传递给远程服务器。
但要注意竞争条件。在单个 shell 会话中使用单个描述符是避免它们的好方法。
传递所需的任何数据后,终止nc
并关闭原始 shell 会话中的描述符:
kill $ncpid
exec 3>&-
Run Code Online (Sandbox Code Playgroud)
请注意,在某些情况下,唯一的后一个命令足以使后台nc
退出;这取决于你做了什么以及你还在用 FIFO 做什么。出于这个原因,我选择nc
明确地杀死。
删除临时目录及其内容(即 fifo):
rm -r "$tmpd"
Run Code Online (Sandbox Code Playgroud)
最后说明:
没有必要首先放入nc
后台。您可以在一个终端中运行它,从另一个终端写入 fifo(知道它的路径)。这样您就可以轻松监控其状态。根据您的需求定制此解决方案。
以下似乎有效:
while read -r; do echo -en "$REPLY" | nc ...; done
Run Code Online (Sandbox Code Playgroud)
\xNN
这允许您在正常数据中包含转义序列,如下所示:
aaaaaaaaaabbbbbbbbbbccccccccccc\x80\xF4\x12
Run Code Online (Sandbox Code Playgroud)
请记住将\
文本输入中的任何文字字符加倍。请注意,使用read -r
and$REPLY
代替变量会停止删除前导空格和尾随空格。
这不会在缓冲区末尾添加换行符,因此您需要忽略命令n
中的选项或在需要换行符的位置echo
键入。\x0a
nc
我目前无法设置,但我已经测试过:
while read -r; do echo -en "$REPLY" | cat | xxd; done
Run Code Online (Sandbox Code Playgroud)
od -ct x1
对于测试,如果没有,可以使用xxd
;或者od -c
如果您很高兴看到八进制的二进制字符,请使用。您可以从管道中省略cat |
:我将其包含在内可能是对nc
.
归档时间: |
|
查看次数: |
21264 次 |
最近记录: |