tcpdump统计http请求并导出URL文本
tcpdump统计http请求并导出URL文本
tcpdump
tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具
tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息
语法
tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ]
[ -s snaplen ] [ -w file ] [ expression ]

strings
strings命令 在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。 strings命令对识别随机对象文件很有用。
语法
strings [ -a ] [ - ] [ -o ] [ -t Format ] [ -n Number ] [ -Number ] [file ... ]
选项
-a --all:扫描整个文件而不是只扫描目标文件初始化和装载段
-f –print-file-name:在显示字符串前先显示文件名
-n –bytes=[number]:找到并且输出所有NUL终止符序列
- :设置显示的最少的字符数,默认是4个字符
-t --radix={o,d,x} :输出字符的位置,基于八进制,十进制或者十六进制
-o :类似--radix=o
-T --target= :指定二进制文件格式
-e --encoding={s,S,b,l,B,L} :选择字符大小和排列顺序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit
@ :读取中选项
awk
awk是linux中处理文本的强大工具,或者说是一种专门处理字符串的语言,它有自己的编码格式。awk的强大之处还在于能生成强大的格式化报告。
语法
常用命令
-F参数:指定分隔符,可指定一个或多个print;: 打印命令, 后面可字符串的拼接数据字段变量
$0表示整行文本$1表示文本行中第一个数据字段$2表示文本行中第二个数据字段$n表示文本行中第n个数据字段
getline;: 常用方法是读取下一行数据 , 也有其他用法
导出方法
tcpdump抓取数据包
tcpdump -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x504f -w /tmp/tcp.cap -s 512 2>&1
按Ctrl+C即可结束抓取 , 也可直接设置定时结束 , 如下定时30s后结束抓取:
tcpdump -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x504f -w /tmp/tcp.cap -s 512 2>&1 &sleep 30
命令解释
-i即interface:指定tcpdump需要监听的网卡。默认会抓取第一个网卡 .eth0即指定的网卡名称 , 可通过ifconfig命令获取网卡信息tcp[20:2]=0x4745 or tcp[20:2]=0x504f: 过滤表达式 , 意思是过滤数据包中tcp数据段的21-22字节字符为GET或者POST的数据包 , 即过滤HTTP GET/POST请求的数据包- 该表达式与wireshark表达式一致 , 可用https://www.wireshark.org/tools/string-cf.html生成
-w /tmp/tcp.cap: 指定tcpdump将抓包数据输出到文件 /tmp/tcp.cap 中而不是标准输出-s 512即-s len:设置tcpdump的数据包抓取长度为512,如果不设置默认将会是65535字节。对于要抓取的数据包较大时,长度设置不够可能会产生包截断2>&1: 将标准错误输出重定向到标准输出 , Linux中1为标准输出(stdout) ,2为标准错误输出(stderr)&sleep 30: 命令保持30s
通过strings命令来找出GET/POST的url以及Host
strings /tmp/tcp.cap | grep -E "GET /|POST /|Host:" | grep --no-group-separator -B 1 -E "Host:" | grep --no-group-separator -A 1 -E "GET /|POST /" | awk '{url=$2;getline;host=$2;printf ("%s\n",host""url)}' > /tmp/url.txt
命令解释
strings /tmp/tcp.cap: 将tcpdump生成的文件指定为查询字符串的源文件grep -E "GET /|POST /|Host:" | grep --no-group-separator -B 1 -E "Host:" | grep --no-group-separator -A 1 -E "GET /|POST /":grep -E "GET /|POST /|Host:": 查找以"GET /、POST /和Host:开头的字符串grep --no-group-separator -B 1 -E "Host:" | grep --no-group-separator -A 1 -E "GET /|POST /": 保证查询的字符串标准输出均为一行Host:紧接着一行GET /或POST /- 此处将多出的几行
/biling登录的url都给去除了 , 做到一一对应 --no-group-separator: 当使用'-A', '-B' or '-C'时,不输出任何组分隔符,而是将不同组相邻输出
- 此处将多出的几行
输出样式示例如下

awk '{url=$2;getline;host=$2;printf ("%s\n",host""url)}' > /tmp/url.txt:url=$2;先将上述得到的标准输出文本的第一行Host:字符串的第二段字符串赋值给url(以空格分段) , 如:tgateway.changyou.comgetline;读取下一行GET /或POST /的内容 ,;host=$2;再将该行的第二段字符串赋值给host , 如:/gateway/cyou/order/query.json?page_no=1&page_size=10&status=&user_id=512001187843600printf ("%s\n",host""url)}' > /tmp/url.txt: 将得到的两个变量以host""url的格式打印至tmp/url.txt中(""为空字符串 , 主要用于表达式中分割两个变量)
其他可实现的需求
计算服务器QPS
wc -l /tmp/url.txt | cut -d' ' -f 1得到一个数字 , 该数字除以统计的秒数即是QPS排除静态文件统计前10访问url:
grep -v -i -E "\.(gif|png|jpg|jpeg|ico|js|swf|css)" /tmp/url.txt | sort | uniq -c | sort -nr | head -n 10
参考资料
- tcpdump: https://www.jianshu.com/p/d9162722f189
- strings: http://ipcmen.com/strings
- awk: https://blog.csdn.net/u010502101/article/details/81839519
- grep: https://www.cnblogs.com/pangbing/p/6535562.html
- 导出文章: http://linux.it.net.cn/e/shell/2014/0706/2390.html
tcpdump统计http请求并导出URL文本的更多相关文章
- 借助tcpdump统计http请求
借助tcpdump统计http请求 这里所说的统计http请求,是指统计QPS(每秒请求数),统计前十条被访问最多的url.一般做这样的统计时,我们经常会使用网站访问日志来统计.当我们来到一个 ...
- 【移动前端开发实践】从无到有(统计、请求、MVC、模块化)H5开发须知
前言 不知不觉来百度已有半年之久,这半年是996的半年,是孤军奋战的半年,是跌跌撞撞的半年,一个字:真的是累死人啦! 我所进入的团队相当于公司内部创业团队,人员基本全部是新招的,最初开发时连数据库都没 ...
- 针对Restful风格参数传递的请求获取真实url
昨天遇到这样一个问题,先简单介绍下. 业务场景 我们想要统计热点请求URL,进而进行分析优化 方案 通过过滤器获取到请求url(调用方法request.getservletpath),通过redis进 ...
- js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可)
js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可) 一.总 ...
- Spring—请求映射之URL路径映射
Spring2.5引入注解式处理器支持,通过@Controller 和 @RequestMapping注解定义我们的处理器类.并且提供了一组强大的注解:需要通过处理器映射DefaultAnnotati ...
- jquery easyui的datagrid在初始化的时候会请求两次URL?
我们项目前端用的是jquery easyui,刚开始使用datagrid加载列表初始化时总是请求两次URL,这让人非常不解,怎么总是请求两次呢?数据一多,加载速度明显变慢,通过查资料才知道原来是重复声 ...
- 请求转发 和 URL 重定向
五 请求转发 和 URL 重定向 1 请求转发和重定向 干什么用? 是我们在java后台servlet中 由一个servlet跳转到 另一个 servlet/jsp 要使用的技术 前端发送请求到后台 ...
- 66.ajax--ajax请求多个url解决办法
ajax请求多个url解决办法 以下四种方法是我找的,我也进行实践过. 测试中有四个请求接口,原本需要13S,用了第三种方法缩减到7S,但是仍不能达到2S以内. 所以仅供参考,待我找到能缩减到2S以内 ...
- jsp-servlet 的相关请求路径问题 —url
jsp-servlet 的相关请求路径问题 —url 本文章主要解决的几方面问题如下: 常见涉及路径元素: jsp页面请求和servlet请求转发.重定向的关系 如何避免下一步请求受上一步请求在UR ...
随机推荐
- 2.8 GO 参数传递
简单将GO中参数传递分为三类 数字.字符.字符串等类型 结构体 方法 GO的方法本身就是地址的入口,打印一个方法输出的是这个方法的地址 func test_func(){ //0x488a30 fmt ...
- 【Linux】【Services】【KVM】安装与简单配置
1. 环境: 1.1. OS: Red Hat Enterprise Linux Server release 7.4 (Maipo) 1.2. Kernel: 3.10.0-693.el7.x86_ ...
- 设计模式学习笔记之看懂UML类图
什么是UML: UML(统一建模语言)是当今软件设计的标准图标式语言.对于一个软件系统而言,UML语言具有以下的功能:可视化功能.说明功能.建造功能和建文档功能. UML都包括什么类型的图: 使用案例 ...
- 【Matlab】求矩阵行和/列和
行和 sum(a, 2) 列和 sum(a) 所有元素之和 sum(sum(a)) 某一列元素之和 sum(a(:,1)) %a矩阵的第一列之和 某一行元素之和 sum(a(1,:)) %a矩阵的第一 ...
- Python语法之基本数据类型
一.数据类型之字符串str 作用:主要用于记录描述性性质的数据,如姓名.地址.邮箱: 定义: 方式1 # 单引号 name = 'jason' 方式2 # 双引号 name = "jason ...
- Python小组作业:基于yolov5的口罩佩戴识别
Python老师给了三个小组项目:1.自身专业问题 2.人工智能 3.游戏或者小工具 提前告知了,写游戏不好拿高分,小工具又不能展示自己的水平.大一刚来也没碰到什么专业问题,于是经过讨论,决定了做人工 ...
- LuoguP7713 「EZEC-10」打分 题解
Content 某个人去参加比赛,\(n\) 个评委分别给他打分 \(a_1,a_2,\dots,a_n\).这个人可以最多执行 \(m\) 次操作,每次操作将一个评委的分数加 \(1\).定义他的最 ...
- python3 迭代器&生成器
前戏:列表生成式 等于 用列表生成式生成列表.需要将所有数据生成到内存中,占用空间,如果数据太多.生成数据就会耗时较久. 例如需要运行卡顿一下..... 定义一个生成器:定义时不生成任何数据,只有通过 ...
- Qt5读取系统环境变量和获取指定目录下的所有文件夹绝对路径
头文件 /// 读取环境变量使用 #include <QProcessEnvironment> /// 遍历文件夹使用 #include <QDir> 核心代码 一个例子, 输 ...
- 【LeetCode】669. Trim a Binary Search Tree 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 日期 题目地址:https://leetcod ...