我想更改linux内核代码以过滤一些tcp数据包并丢弃它。
但我总是一次又一次地收到它。下面是我的代码
/net/ipv4/tcp_ipv4.c
int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
{
// my code start
struct iphdr *iph;
iph = skb->nh.iph;
if(iph->ttl > 64) // I want to drop all tcp packet that meet this requirement
{
return 0;
}
// my cod
我正在学习Linux ping命令及其选项,并阅读了用于标记传出数据包的-m选项。当接收到时,我们可以首先过滤标记的数据包结果。
我正试图为这个包设置标记,但我收到了一个警告信息:
$ ping -m 10 server
PING server (192.168.2.2) 56(84) bytes of data.
Warning: Failed to set mark 10
64 bytes from server (192.168.2.2): icmp_req=1 ttl=64 time=0.182 ms
64 bytes from server (192.168.2.2): icmp_r
长BPF滤波器减慢tcpdump的速度吗?
我重放所有数据包都有ttl=k的数据包跟踪,并等待ICMP消息返回。我注意到的是,如果我使用以下过滤器(在eth0上):
(ip and ip[8]=$k and src host $myAddress) or (icmp and dst host $myAddress and icmp[0]=11)
...I总是在发送的数据包中遗漏20-30个数据包,而如果我只是这样做的话:
ip
..。然后对捕获文件执行上述过滤脱机,我会找到我发送的所有数据包。
这是众所周知的行为吗?
假设案例
假设路由器(R1)接收长度为:820(报头+有效负载)的IP数据报,TTL:255,ID:11。传出链路的IP-MTU大小为420。
现在,R1必须将数据报分割成两个片段。问题是,这些创建的片段的TTL将是什么:
会是(TTL of the received IP datagram -1)吗
还是认为片段从此路由器开始,启动TTL将由此路由器(R1)分配。
最近,我决定丢弃想要通过端口80的数据包。它接缝我的配置有一个问题,因为一些不想要的数据包被丢弃。
我的配置摘录如下:
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -s [PUBLIC IP OF MY SERVER] --sport 80 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
问题1:第二条规则不是没用的吗,因为我在第一条规则中已经说过,我接受所有具有“已建立”状态的数据包?