gpt4 book ai didi

linux - 如何在不影响发件人的情况下丢弃出站 UDP 数据包?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:52 25 4
gpt4 key购买 nike

我试图抑制出站 UDP 数据包,而不让这些数据包的生产者知道。我的想法是使用 iptables 像这样丢弃数据包:

iptables -A OUTPUT -p udp -d 127.0.0.1 -j DROP

问题是发送应用程序从 sendto() 中获取 -1 作为返回值而不是发送的字节数,然后将其作为错误处理。我需要发送应用程序不知道它的输出正在被丢弃。有什么办法吗?

最佳答案

如果您知道 UDP 流量的目的地是哪个端口,则可以将它们重定向到本地主机上的另一个端口,而不是丢弃它们。这样你就可以提供一个除了接收数据包之外什么都不做的监听接收器。由于数据包现在已交付,虽然不是它们最初的目的地,sendto() 不会返回 -1,而是返回字节数。

接收器的示例如下所示:

#!/usr/bin/perl

use IO::Socket::INET;

# flush after every write
$| = 1;

my $sock;
my $data;

$socket = new IO::Socket::INET ( LocalPort => '55555', Proto => 'udp',);
while(1) { $socket->recv($data,1024); }
$socket->close();

# end of file.

上面的内容将永远愉快地坐在端口 55555 上,并且对它接收到的数据不做任何事情。接下来的事情是重定向数据包的目的地,也就是说任何目的地为任何主机的端口 555 改为本地端口 55555:

iptables -t nat -A OUTPUT -p udp --dport 555 -j DNAT --to-destination 127.0.0.1:55555

使用适当的源/目标地址规范限制上述规则,以防您不想将所有流量重定向到端口 555 的所有目标。

关于linux - 如何在不影响发件人的情况下丢弃出站 UDP 数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26146677/

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