iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python调用tcpdump抓包过滤
  • 286
分享到

python调用tcpdump抓包过滤

pythontcpdump 2023-01-31 05:01:12 286人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

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

之前在linuxpython脚本写一个抓包分析小工具,实在不想用什么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

运行效果:



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


转载请注明:Http://blog.csdn.net/wangqiuyun/article/details/46966839

--结束END--

本文标题: python调用tcpdump抓包过滤

本文链接: https://www.lsjlt.com/news/189036.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作