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删除指定目录下过期文件的2个脚本分享
Apr 10 Python
Python Sleep休眠函数使用简单实例
Feb 02 Python
Python计算字符宽度的方法
Jun 14 Python
详解使用python的logging模块在stdout输出的两种方法
May 17 Python
Python中列表list以及list与数组array的相互转换实现方法
Sep 22 Python
解决pandas read_csv 读取中文列标题文件报错的问题
Jun 15 Python
python requests 测试代理ip是否生效
Jul 25 Python
Python如何筛选序列中的元素的方法实现
Jul 15 Python
简单了解django orm中介模型
Jul 30 Python
Python OpenCV视频截取并保存实现代码
Nov 30 Python
Python读取JSON数据操作实例解析
May 18 Python
Python爬取酷狗MP3音频的步骤
Feb 26 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
php代码运行时间查看类代码分享
2011/08/06 PHP
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
php实现socket推送技术的示例
2017/12/20 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
JavaScript 程序编码规范
2010/11/23 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
微信小程序之页面拦截器的示例代码
2017/09/07 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
动态创建类实例代码
2009/10/07 Python
python二叉树的实现实例
2013/11/21 Python
Python subprocess模块学习总结
2014/03/13 Python
Python中一行和多行import模块问题
2018/04/01 Python
python实现list由于numpy array的转换
2018/04/04 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
详解python的变量缓存机制
2021/01/24 Python
利用CSS3的checked伪类实现OL的隐藏显示的方法
2010/12/18 HTML / CSS
新奇的小玩意:IWOOT
2016/07/21 全球购物
基层党支部公开承诺书
2014/05/29 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
学校清明节活动总结
2014/07/04 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers