NFQUEUE抓包

nfqueue

和C的libipq比起来,支持python的nfqueue会显得强大很多,特别是和scapy结合起来用的时候。

首先需要说明的是在iptables中的target除了之前提到的五项(ACCEPT,DROP,RETURN,QUEUE,other_chain)之外,还有一个叫NFQUEUE,它是QUEUE的扩展。相比于QUEUE,它可以由用户指定不同的queue number。

在使用nfqueue之前,需要安装如下的包:

$ sudo aptitude install libnetfilter-queue-dev
$ sudo aptitude install nfqueue-bindings-python
$ sudo aptitude install python-scapy

之后就可以采用python对NFQUEUE进行操作了。

假设我们将封包从主机A(192.168.1.1)传输到主机B(192.168.1.2)时,需要对封包进行分析,如果是TCP协议的包,并且其flags为 ACK|PSH 的话,则将其payload进行修改(比如替换成“hack”):

首先,需要先在主机A中对iptables进行操作:

$ sudo iptables -A OUTPUT -d 192.168.1.2 -p tcp -j NFQUEUE

然后利用下面的代码:

<span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
<span class="line-number">20</span>
<span class="line-number">21</span>
<span class="line-number">22</span>
<span class="line-number">23</span>
<span class="line-number">24</span>
<span class="line-number">25</span>
<span class="line-number">26</span>
<span class="line-number">27</span>
<span class="line-number">28</span>
<span class="line-number">29</span>
<span class="line-number">30</span>
<span class="line-number">31</span>
<span class="line-number">32</span>
<span class="line-number">33</span>
<span class="line-number">34</span>
<span class="line-number">35</span>
<span class="line-number">36</span>
<span class="line-number">37</span>
import os,sys,nfqueue,socket
from scapy.all import *

def ch_payload_and_send(pkt):
  pkt[TCP].payload == "hack"
  send(pkt, verbose=0)

def process(i, payload):
  data = payload.get_data()
  pkt = IP(data)

  # Check if TCP flags is ACK|PSH
  if pkt[TCP].flags == 24:
      # Dropping the packet
      payload.set_verdict(nfqueue.NF_DROP)
      ch_payload_and_send(pkt)
  else:
      # Accepting the packet
      payload.set_verdict(nfqueue.NF_ACCEPT)
  
def main():
  q = nfqueue.queue()
  q.open()
  q.unbind(socket.AF_INET)
  q.bind(socket.AF_INET)
  q.set_callback(process)
  q.create_queue(0)

  try:
      q.try_run()
  except KeyboardInterrupt:
      print "Exiting..."
      q.unbind(socket.AF_INET)
      q.close()
      sys.exit(1)

main()

这里用到了scapy这个非常牛逼的模块,它可以直接通过如IP()TCP()等直接对包进行解释和操作,非常方便,具体的可以参看它的文档。这里只是说明下它的安装方式:

$ wget scapy.net
$ mv index.html scapy-latest.zip
$ chmod +x scapy-latest.zip
$ mv scapy-latest.zip /usr/local/bin/scapy

然后就可以运行:

$ sudo scapy

直接开启scapy的交互模式了。

转载自:http://blog.youkuaiyun.com/langeldep/article/details/8788360
<think>好的,我现在需要帮助用户解决关于在Linux系统中接入DPI(Deep Packet Inspection,深度包检测)进行操作的问题。首先,我要明确用户的需求,他们可能想知道如何在Linux环境下配置和使用DPI技术,可能的应用场景包括网络安全监控、流量管理或数据包分析等。 首先,我应该回顾一下DPI的基本概念。DPI不仅仅是检查数据包的头部,而是深入分析负载内容,识别应用层协议,检测恶意软件等。在Linux中,常见的实现方式可能涉及使用特定的库或工具,比如libpcap、nDPI,或者结合Netfilter框架进行数据包处理。 接下来,用户需要具体的操作步骤。可能需要先安装相关的软件包,比如nDPI或者Suricata,这些工具支持DPI功能。然后配置网络接口,设置抓包规则,可能涉及iptables或nftables来引导流量到DPI处理程序。同时,用户可能需要编写自定义的脚本来处理分析后的数据,比如使用Python的Scapy库。 然后,我需要考虑用户可能遇到的问题,比如性能优化,因为DPI对系统资源要求较高。可能需要建议用户使用内核旁路技术(如DPDK)或者多线程处理来提高效率。另外,权限问题也是常见的,运行这些工具可能需要root权限或者相应的capabilities设置。 还要确保回答中提到的命令和配置示例准确无误,比如使用apt-get安装依赖,编译nDPI的步骤,以及配置Suricata的示例。同时,需要区分不同的使用场景,比如实时监控与离线分析的不同方法。 最后,生成的相关问题需要覆盖用户可能进一步询问的方向,比如工具比较、性能优化、安全性考虑以及容器环境中的应用。这有助于用户全面了解DPI在Linux中的集成和操作。</think>### Linux系统中DPI集成与操作方法 #### 一、DPI技术基础 DPI(深度包检测)通过解析网络数据包的应用层内容实现流量识别与控制,其核心在于协议识别和负载分析[^1]。在Linux系统中,DPI通常通过以下组件实现: 1. 抓包引擎:如$libpcap$提供原始数据包捕获 2. 协议解析库:如$nDPI$(开源深度包检测库) 3. 处理框架:如$Netfilter$的$xt_layer7$模块 #### 二、基本集成步骤 1. **安装依赖** ```bash sudo apt-get install libpcap-dev libndpi-dev build-essential ``` 2. **编译nDPI示例** ```bash git clone https://github.com/ntop/nDPI cd nDPI ./autogen.sh && ./configure && make ``` 3. **配置网络接口** ```bash sudo ip link set eth0 promisc on # 启用混杂模式 sudo ethtool -K eth0 gro off lro off # 禁用卸载功能 ``` 4. **使用Netfilter进行流量引导** ```iptables配置示例: iptables -A FORWARD -j NFQUEUE --queue-num 0 # 将流量导向用户空间 ``` #### 三、操作实践方法 1. **实时流量分析** ```python from scapy.all import sniff def packet_handler(pkt): if pkt.haslayer('Raw'): print(f"Payload: {pkt.load.hex()[:20]}...") sniff(iface="eth0", prn=packet_handler, filter="tcp port 80") ``` 2. **使用Suricata进行深度检测** ```yaml # suricata.yaml配置片段 app-layer: protocols: tls:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值