【问题标题】:Drop packet with libpcap使用 libpcap 丢弃数据包
【发布时间】:2010-11-20 01:31:19
【问题描述】:

是否可以让 libpcap 删除一个数据包,而不是在它通过时嗅探它?我想拦截每个数据包并将其与测量数据一起封装成一个新数据包,但两个数据包(我的和原始数据包)都到达目的地。

【问题讨论】:

  • 因为这个问题是关于 libcap 的,你可能想添加一个 libpcap 标签。

标签: packet libpcap


【解决方案1】:

这是不可能的。您需要编写一个驱动程序(针对您的操作系统)以使网络堆栈过滤掉数据包。

【讨论】:

  • 有很多 linux 内核选项可以改变网络栈的行为。例如,echo 0 > /proc/sys/net/ipv4/ip_forward 关闭不转发到此主机的数据包。
  • @Ben:没错。但是,我怀疑你是否可以使用这样的配置来实现他想要的。
  • Linux 内核的 IPTables 是挖掘有关删除 pcakets 信息的好地方
【解决方案2】:

您可以做到这一点的唯一方法是成为发送方和接收方之间的唯一物理路径,并关闭拦截器上的数据包转发。

如果您正在捕获无线流量,则无能为力。没有任何软件库可以去除环境空气中的无线电波。

【讨论】:

    【解决方案3】:

    不,libpcap 不能“删除数据包”。

    不太清楚您想要实现什么,但您似乎想要接收数据,向其中添加一些附加信息,然后重新发布。如果您使用的是 UDP 等数据报协议,那么您可以简单地将增强数据重新发送到不同的 UDP 端口。

    【讨论】:

      【解决方案4】:

      作为对 Ben S 的回应,您无法从空中删除数据包,但您可以阻止它们到达目的地 - 使用 ARP 缓存中毒等。

      【讨论】:

        【解决方案5】:

        正如其他人所说,您不能使用 libpcap。 libpcap 是一个被动监听器。如果你在 Linux 上,你可以使用一个 netfilter,它连接到 iptables。这是一个如何做到这一点的示例。

        http://www.linuxjournal.com/article/7184

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-19
          • 2011-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多