int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) {
struct udp_sock *up = udp_sk(sk);
int rc;
int is_udplite = IS_UDPLITE(sk);
/*
* Charge it to the socket, dropping if the queue is full.
*/
if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb))
goto drop;
我有以下iptables规则:
-A INPUT -i eth0 -p udp -m udp --dport 1194 -m state --state NEW -j ACCEPT
-A INPUT -i tun+ -j ACCEPT
-A INPUT -j DROP
-A FORWARD -i tun+ -j ACCEPT
-A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHE
我想要防止udp泛滥,所以我认为如果我放弃所有不来自内部网络且与udp连接无关的udps,我就可以防止udp泛滥。换句话说,如果只有来自内部网络的udps,以及来自外部网络的udps,而不是第一个与udp连接相关的udps,则不会发生udp泛滥,而且我认为我编写的这段可修改的代码可以工作。
# accept any packet that's a response to anything we sent
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp -
我必须使用UDP传输更大的文件(高达10 to )。不幸的是,TCP不能在此用例中使用,因为发送方和接收方之间不存在双向通信。
发送文件不是问题。我用netty写了客户的信。它读取文件,对其进行编码(唯一ID、流中的位置等),并以可配置的速率(每秒数据包)将其发送到目的地。所有的数据包都在目的地接收。我用iptable和Wireshark来验证这一点。
问题发生在收件人身上。接收高达90K数据包,第二个工作非常好。但是用一个线程来接收和解码是不可能的。我的第一种方法是使用线程安全队列(一个生产者和多个使用者)。但是使用多个消费者并没有带来更好的结果。仍有一些数据包丢失。开销(锁定/解锁队列)似
我想在Python3.5中做一个包嗅探器,它捕获UDP、TCP和ICMP。这是一个简短的例子:
import socket
import struct
# the public network interface
HOST = socket.gethostbyname(socket.gethostname())
# create a raw socket and bind it to the public interface
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
s.bind((HOS
我不太清楚这一切从哪里开始,但我假设我需要某种网络驱动程序来捕获所有的UDP流量。(请告诉我哪一个是最好的记录和工作)
在C#中成功捕获UDP数据包之后,我将通过TCP连接将它们发送到我的服务器,在该连接中,我需要将UDP发送到目的地,然后将响应发送回客户端计算机(即捕获数据包),然后将响应发送到程序,就好像它是直接来自有关服务器一样。
所以基本上我的联系如下:
Client running UDP program <<==TCP connection==>> Conversion Server <<==UDP connection==>> UD
我想捕获发送到本地端口的UDP数据包,过滤表达式类似于udp port 20000。我注意到如果UDP数据包上有IP碎片,libpcap只能捕获第一个IP片段。我想原因是第二个IP片段没有UDP报头(我认为对于TCP是一样的),所以libpcap不能使用filter udp port 20000捕获它们。
有什么解决办法吗?或者可以捕获发送到特定本地端口的数据包的任何其他库?
谢谢!