【问题标题】:How to send one byte symbol to server socket with netcat?如何使用 netcat 向服务器套接字发送一个字节符号?
【发布时间】:2012-02-09 10:25:48
【问题描述】:

已经有一个通过套接字工作的服务器服务,我想通过 netcat 对其进行测试。我正在使用 Mac OS X Lion。目前,我可以通过端口连接到服务器,发送数据包,但数据包包含错误的值。以下是详细信息:

我需要向服务器发送“m”符号,服务器将返回 00000000,一个零字节作为响应。服务器人告诉我,当我发送“m”时服务器收到“A0”,当我发送“109”时服务器收到“313039A”。如何定义发送格式什么的,我只需要发送'm'(01101101)?

【问题讨论】:

  • 不知道 A0,但在 ASCII 109 中是 0x31 0x30 0x39

标签: sockets netcat


【解决方案1】:

你可以只发送“m”

echo -n 'm' | nc <server> <port>

您可以在本地机器上轻松检查您发送的内容:

# in one Terminal start the listener:
$ nc -l 1234 | hexdump -C
00000000  6d                                                |m|
00000001

# in other Terminal send the packet:
$ echo -n 'm' | nc 127.0.0.1 1234

nc 将愉快地发送/接收 NUL 字节 - 这没有问题:

# sending side
$ echo -n X | tr X '\000' | nc 127.0.0.1 1234

# receiving side
$ nc -l 1234 | hexdump -C
00000000  00                                                |.|
00000001

【讨论】:

  • 非常感谢。但是,当我通过 nc 仅发送“m”时,服务器没有响应。当我从我的程序发送手动形成的数据包时(objective-c)。此外,示例中的 00000000 和 00000001 是什么意思?我假设,'6d' 是 'm' 但其他值是什么意思?恕我直言,它发送 3 个字节:空字节、“m”值和数据包大小。
  • 但我只需要发送 1 个字节:只是 'm' (01101101) 的值。这就是服务器的实现方式。这是一个握手包。
  • 不,000000 是地址——从 0 开始,所以它表示只有一个字节 0x6d,它正好是 'm'
  • 好的。实际上,服务器在获得握手“m”后发送零字节作为响应。也许一切正常,我确实向服务器发送了“m”,但也许 netcat 不显示零字节。此操作后,连接建立,我可以发送其他数据包并可以看到它们的结果,但不确定在发出第二个请求时如何输入确切的字节。在 echo .. nc 之后,光标在空白新行中,恕我直言,所有输入的符号都被解释为 ASCII 符号,而不是字节。
  • netcat 会很高兴收到一个 NUL 字符并将其传递 - 我已经用输出更新了答案以证明这一点
猜你喜欢
  • 2017-11-22
  • 2012-01-18
  • 1970-01-01
  • 2013-10-16
  • 2013-05-06
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多