gpt4 book ai didi

python - netcat 发送额外的 "X"UDP 数据包

转载 作者:太空狗 更新时间:2023-10-29 22:25:36 27 4
gpt4 key购买 nike

here 窃取我已经设置了一个小的 Python 脚本,它监听一个端口并打印出它接收到的所有 UDP 数据包:

import socket

UDP_IP = "127.0.0.1"
UDP_PORT = 5005

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))

while True:
data, addr = sock.recvfrom(1024)
print "received message:", repr(data)

现在我正在使用 netcat 将数据发送到此脚本。这是我的命令行。

echo -e "foo:1|c" | netcat -v -u localhost 5005

这是 Python 的输出:

received message: 'X'
received message: 'X'
received message: 'X'
received message: 'X'
received message: 'X'
received message: 'foo:1|c\n'

前四行左右的“X”行大约以一秒的间隔到达,然后最后两行大致同时到达。

我的问题是:这些额外的“X”数据包是从哪里来的,如果来源是 netcat,那么如何防止 netcat 发出它们?我相信这是 BSD 的 netcat

最佳答案

This is BSD's netcat, I believe.

我遇到了同样的问题,当我执行 nc --version 时,我确实看到了:

This is nc from the netcat-openbsd package. An alternative nc is available in the netcat-traditional package.

传统观点认为 BSD 是“更好”的版本(参见 What are the differences between netcat-traditional and netcat-openbsd?)

但不管怎样,BSD 源是人们必须寻找“X”实际来源的相关代码的地方。而且您不必看得太难!

http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/nc/netcat.c?rev=1.177

确凿的证据是函数 udptest():

/*
* udptest()
* Do a few writes to see if the UDP port is there.
* Fails once PF state table is full.
*/
int
udptest(int s)
{
int i, ret;

for (i = 0; i <= 3; i++) {
if (write(s, "X", 1) == 1)
ret = 1;
else
ret = -1;
}
return (ret);
}

如果设置了 vflag(详细程度)或 zflag(端口扫描标志),则调用此方法的条件是:

if (vflag || zflag) {
/* For UDP, make sure we are connected. */
if (uflag) {
if (udptest(s) == -1) {
ret = 1;
continue;
}
}
...

关于为什么 -v 开关会开始在 UDP 端口上抛出随机数据的基本原理,我猜这个想法是那些使用 >-v 想要他们能得到的每一点信息。因此,为了在调试情况下帮助某人,尽早获得关于连接的语音错误消息的权衡是值得的。

但即便如此,我的意见是,与其发送神秘的 "X",不如发送类似 "NETCAT UDP PING DUE TO -V OPTION" 的内容更好的。 :-/

关于python - netcat 发送额外的 "X"UDP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35485726/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com