首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在linux内核中丢弃tcp数据包而不能一次又一次地收到?

如何在linux内核中丢弃tcp数据包而不能一次又一次地收到?
EN

Stack Overflow用户
提问于 2011-03-26 00:55:21
回答 3查看 1.7K关注 0票数 2

我想更改linux内核代码以过滤一些tcp数据包并丢弃它。

但我总是一次又一次地收到它。下面是我的代码

/net/ipv4/tcp_ipv4.c

代码语言:javascript
代码运行次数:0
运行
复制
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 */
...
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-26 03:02:03

正如@nos所说,TCP是可靠的,因此另一端将重新传输丢弃的数据包。您需要发送RST或ICMP错误(可能是主机无法到达或被管理禁止)来断开连接。

另外,请注意,您已经造成了内存泄漏,您需要负责在丢弃skb时释放它们。

票数 2
EN

Stack Overflow用户

发布于 2011-03-26 02:48:25

iptables有一个ttl模块,可以按ttl过滤:

代码语言:javascript
代码运行次数:0
运行
复制
iptables –A INPUT -m ttl --ttl-gt 65 –j DROP
票数 1
EN

Stack Overflow用户

发布于 2011-03-26 03:06:40

如果您真的想这样做,您可以修改代码以发送对数据包的确认,但将其丢弃。我并不推荐这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5435598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档