我想更改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 */
...
}

最佳答案

正如@nos所说,TCP是可靠的,因此另一端将重新传输掉的包。您需要发送一个RST或一个ICMP错误(可能是主机无法访问,管理上禁止)来断开连接。
另外,请注意,您已经创建了一个内存泄漏,当您丢弃它们时,您有责任释放skb。

10-04 19:04