gpt4 book ai didi

python调用tcpdump抓包过滤的方法

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python调用tcpdump抓包过滤的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例为大家分享了python调用tcpdump抓包过滤的具体代码,供大家参考,具体内容如下 。

之前在linux用python脚本写一个抓包分析小工具,实在不想用什么libpcap、pypcap所以,简单来了个tcpdump加grep搞定。基本思路是分别起tcpdump和grep两个进程,进程直接通过pipe交换数据,简单代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#! /usr/bin/python
 
def tcpdump():
  import subprocess, fcntl, os
  # sudo tcpdump -i eth0 -n -s 0 -w - | grep -a -o -E "Host: .*|GET /.*"
  cmd1 = [ 'tcpdump' , '-i' , 'eth0' , '-n' , '-B' , '4096' , '-s' , '0' , '-w' , '-' ]
  cmd2 = [ 'grep' , '--line-buffered' , '-a' , '-o' , '-E' , 'Host: .*|GET /.*' ]
  p1 = subprocess.Popen(cmd1, stdout = subprocess.PIPE)
  p2 = subprocess.Popen(cmd2, stdout = subprocess.PIPE, stdin = p1.stdout)
 
  flags = fcntl.fcntl(p2.stdout.fileno(), fcntl.F_GETFL)
  fcntl.fcntl(p2.stdout.fileno(), fcntl.F_SETFL, (flags | os.O_NDELAY | os.O_NONBLOCK))
  return p2
 
 
def poll_tcpdump(proc):
  #print 'poll_tcpdump....'
  import select
  txt = None
  while True :
  # wait 1/10 second
  readReady, _, _ = select.select([proc.stdout.fileno()], [], [], 0.1 )
  if not len (readReady):
   break
  try :
   for line in iter (proc.stdout.readline, ""):
   if txt is None :
    txt = ''
   txt + = line
  except IOError:
   print 'data empty...'
   pass
  break
  return txt
 
 
proc = tcpdump()
while True :
  text = poll_tcpdump(proc)
  if text:
  print '>>>> ' + text

运行效果:

python调用tcpdump抓包过滤的方法

其中值得注意tcpdump中'-B', '4096'这个参数,官方文档貌似没有明确提及,但是它是你解决丢包的关键地方之一,当然还有-s这个参数也得好好利用!其他的大家可以自由发挥! 。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:https://blog.csdn.net/wangqiuyun/article/details/46966839 。

最后此篇关于python调用tcpdump抓包过滤的方法的文章就讲到这里了,如果你想了解更多关于python调用tcpdump抓包过滤的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com