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中list列表的一些进阶使用方法介绍
Aug 15 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
python分析作业提交情况
Nov 22 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
May 18 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 Python
使用 Python 实现简单的 switch/case 语句的方法
Sep 17 Python
在Python中分别打印列表中的每一个元素方法
Nov 07 Python
Python创建字典的八种方式
Feb 27 Python
pytorch 图像中的数据预处理和批标准化实例
Jan 15 Python
Python Tkinter实例——模拟掷骰子
Oct 24 Python
基于Python模拟浏览器发送http请求
Nov 06 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+JS+rsa数据加密传输实现代码
2011/03/23 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
JQuery 入门实例1
2009/06/25 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
JS中检测数据类型的几种方式及优缺点小结
2016/12/12 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
vue+Java后端进行调试时解决跨域问题的方式
2017/10/19 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
jQuery实现表格隔行换色
2018/09/01 jQuery
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
微信小程序 行的删除和增加操作实现详解
2019/09/29 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
[53:10]完美世界DOTA2联赛决赛日 FTD vs GXR 第二场 11.08
2020/11/11 DOTA
python操作excel文件并输出txt文件的实例
2018/07/10 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
用C语言实现文件读写操作
2013/10/27 面试题
优秀毕业生自荐信范文
2014/01/01 职场文书
期末学生评语大全
2014/04/24 职场文书
捐资助学感谢信
2015/01/21 职场文书
自我检讨报告
2015/01/28 职场文书
党员年度个人总结
2015/02/14 职场文书
感恩教育观后感
2015/06/17 职场文书
React实现动效弹窗组件
2021/06/21 Javascript
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android