我想更改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 code end
// start normal linux code
if(sk->sk_state == TCP_ESTABLISHED) { /* Fast path */
...
}
发布于 2011-03-26 03:02:03
正如@nos所说,TCP是可靠的,因此另一端将重新传输丢弃的数据包。您需要发送RST或ICMP错误(可能是主机无法到达或被管理禁止)来断开连接。
另外,请注意,您已经造成了内存泄漏,您需要负责在丢弃skb时释放它们。
发布于 2011-03-26 02:48:25
iptables有一个ttl模块,可以按ttl过滤:
iptables –A INPUT -m ttl --ttl-gt 65 –j DROP
发布于 2011-03-26 03:06:40
如果您真的想这样做,您可以修改代码以发送对数据包的确认,但将其丢弃。我并不推荐这样做。
https://stackoverflow.com/questions/5435598
复制相似问题