我正在尝试通过 netcat ( nc
) 将二进制数据包发送到本地进程,如下所示:
nc -w 1 -u localhost 10000 < my_binary_packet.bin
输出是:
read(net): Connection refused
有谁知道发生了什么?
我得到相同的结果nc -w 1 -u 127.0.0.1 10000 < my_binary_packet.bin
我正在尝试通过 netcat ( nc
) 将二进制数据包发送到本地进程,如下所示:
nc -w 1 -u localhost 10000 < my_binary_packet.bin
输出是:
read(net): Connection refused
有谁知道发生了什么?
我得到相同的结果nc -w 1 -u 127.0.0.1 10000 < my_binary_packet.bin
概括
如果您的侦听器绑定到特定 IP(例如
192.168.0.10
)和端口(例如10000
)而不是 IPINADDR_ANY
(Internet Namespace Address Any),请执行此操作以指定正确的 IP:细节
好的,所以我想通了!
我编写了尝试将二进制数据包发送到的本地侦听器进程,并将该套接字绑定到特定的 IP 地址,
192.168.0.10
而不是“包罗万象”的 IP 地址INADDR_ANY
。绑定到那个特定的 IP 地址意味着我的监听进程没有监听localhost
(127.0.0.1
),所以这些数据包被拒绝了!我不知道您可以使用localhost
or以外的任何其他方式向在同一台 PC 上运行的进程发送一些数据127.0.0.1
,但显然您可以。所以,这可以代替:
但是, 1 秒 ( ) 的超时/等待时间
-w 1
似乎没有任何作用——我不知道为什么。它只是在发送数据包后坐在那里,如果我想再次发送它,我必须在它发送后+Ctrl进程。不过这并不重要——关键是:它有效!Cnc
我还仔细阅读了我的问题下的评论,所以这里有更多信息供任何想知道的人使用:
等效的
socat
命令是这样的(不要忘记-
命令中的!):此外,这是我
netcat
的socat
嵌入式 Linux 板上的版本。走得更远
如何在 C 或 C++ 中构建二进制数据包以通过
netcat
或发送socat
最后,对于任何想知道的人,我编写二进制数据包的方式
my_binary_packet.bin
是简单地编写一些 C 代码,使用 Linuxwrite()
命令将打包结构写入文件。像这样将数据包写入二进制文件可以通过
netcat
or轻松测试socat
,这就是促使我在它不起作用时提出这个问题的原因。请务必在打开文件时设置文件权限。前任:
这是结构定义的样子。在我为结构的每个成员设置特定的所需值之后,该
my_binary_packet.bin
文件实际上只包含该二进制数据包内该结构的逐字节副本:打开文件、创建数据包并将二进制数据包写入文件的完整代码可能如下所示:
对于任何想学习如何用 C 或 C++ 编写 Berkeley 套接字的人...
我在我的eRCaGuy_hello_world 存储库中编写了这个非常全面的演示。此服务器代码是我的 UDP 侦听器进程所基于的:
参考