python调用tcpdump抓包过滤的方法


Posted in Python onJuly 18, 2018

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

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

#! /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这个参数也得好好利用!其他的大家可以自由发挥!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python判断windows隐藏文件的方法
Mar 21 Python
python操作mysql中文显示乱码的解决方法
Oct 11 Python
Python中static相关知识小结
Jan 02 Python
利用pyinstaller打包exe文件的基本教程
May 02 Python
python五子棋游戏的设计与实现
Jun 18 Python
基于Python2、Python3中reload()的不同用法介绍
Aug 12 Python
浅谈django url请求与数据库连接池的共享问题
Aug 29 Python
Python基础教程(一)——Windows搭建开发Python开发环境
Jul 20 Python
Python使用内置函数setattr设置对象的属性值
Oct 16 Python
python list等分并从等分的子集中随机选取一个数
Nov 16 Python
calendar在python3时间中常用函数举例详解
Nov 18 Python
Python中对象的比较操作==和is区别详析
Feb 12 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 #Python
解决Python3中的中文字符编码的问题
Jul 18 #Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 #Python
python 将print输出的内容保存到txt文件中
Jul 17 #Python
python 实现对数据集的归一化的方法(0-1之间)
Jul 17 #Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
Jul 17 #Python
python把数组中的数字每行打印3个并保存在文档中的方法
Jul 17 #Python
You might like
Mysql数据库操作类( 1127版,提供源码下载 )
2010/12/02 PHP
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
tp5.1 框架查询表达式用法详解
2020/05/25 PHP
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
js实现文本框宽度自适应文本宽度的方法
2015/08/13 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
react中fetch之cors跨域请求的实现方法
2018/03/14 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
Python和JavaScript间代码转换的4个工具
2016/02/22 Python
Django中login_required装饰器的深入介绍
2017/11/24 Python
Python编程求质数实例代码
2018/01/31 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
python如何让类支持比较运算
2018/03/20 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
Python random模块制作简易的四位数验证码
2020/02/01 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
iostream与iostream.h的区别
2015/01/16 面试题
高级工程师岗位职责
2013/12/15 职场文书
简历中自我评价怎么写
2014/02/12 职场文书
大学生两会精神学习心得体会
2014/03/10 职场文书
建设投标担保书
2014/05/13 职场文书
新兵入伍心得体会
2014/09/04 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
美术教师个人工作总结
2015/02/06 职场文书
2015年度个人教学工作总结
2015/05/20 职场文书
详解Js模块化的作用原理和方案
2021/04/29 Javascript
总结几个非常实用的Python库
2021/06/26 Python