Ubuntu中使用netcat发送16进制网络数据包

在 Ubuntu 中,使用 netcatnc)发送 16 进制数据,可以通过 echoprintfxxd 等工具将十六进制数据转换为二进制格式,再通过管道传递给 nc。以下是几种方法:


方法 1:使用 echo + xxd(推荐)

xxd 是一个十六进制转二进制的工具,可以方便地将十六进制字符串转换为原始二进制数据。
示例(发送 UDP 十六进制数据):

echo "48656c6c6f20576f726c64" | xxd -r -p | nc -u 目标IP 目标端口
  • 48656c6c6f20576f726c64"Hello World" 的十六进制形式。
  • xxd -r -p-r 表示反向转换(十六进制→二进制),-p 表示纯十六进制模式。
  • nc -u-u 表示 UDP 模式(TCP 可去掉 -u)。

方法 2:使用 printf

printf 可以直接输出二进制数据,适合简单的十六进制数据。
示例(发送 TCP 十六进制数据):

printf '\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64' | nc 目标IP 目标端口
  • \x48\x65\x6c\x6c\x6f..."Hello World" 的十六进制转义形式。
  • 如果发送 UDP,加上 -u 选项:
    printf '\x48\x65\x6c\x6c\x6f' | nc -u 目标IP 目标端口
    

方法 3:发送文件中的十六进制数据

如果数据较长,可以先将十六进制内容写入文件,再用 xxd 转换后发送:

echo "48656c6c6f0a" > hexdata.txt  # 写入十六进制数据
xxd -r -p hexdata.txt | nc 目标IP 目标端口

验证接收端

可以使用 nc 监听端口,并用 xxd 查看接收到的十六进制数据:

nc -l -p 端口 | xxd
  • -l -p 端口:监听指定端口(TCP)。
  • 如果是 UDP,使用:
    nc -u -l -p 端口 | xxd
    

注意事项

  1. 协议选择
    • TCP 默认模式(不加 -u)。
    • UDP 需加 -u 选项。
  2. 数据格式
    • 确保十六进制字符串是 偶数长度(如 AABBCC,不能是 AABBC)。
  3. 工具安装
    • 如果 xxd 未安装,可以通过 vim-commonxxd 包安装:
      sudo apt install xxd
      

总结

  • 简单十六进制数据printf '\x...' | nc
  • 复杂或长数据echo "..." | xxd -r -p | nc
  • UDP 模式 → 加 -u 选项。

如果需要发送特定协议(如自定义 TCP/UDP 头),建议改用 Scapysendip 等更灵活的工具。

你可能感兴趣的:(ubuntu,网络,linux)