借助tcpdump统计http请求

借助tcpdump统计http请求

这里所说的统计http请求,是指统计QPS(每秒请求数),统计前十条被访问最多的url。一般做这样的统计时,我们经常会使用网站访问日志来统计。当我们来到一个陌生的服务器环境,需要立即统计当前前十条被访问最多的url,来初步确定是否存在攻击行为,使用tcpdump则简单得多,因为我们不需要关心网站日志在哪,不需要考虑网站日志有没有开启之类的问题,直接用tcpdump捕捉当前的http包,再进一步过滤,就会得出我们想要的统计。此功能已集成到EZHTTP,下面是效果图:

下面介绍其统计方法。
1、捕捉10秒的数据包。

  1. tcpdump -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x504f -w /tmp/tcp.cap -s 512 2>&1 &
  2. sleep 10
  3. kill `ps aux | grep tcpdump | grep -v grep | awk ‘{print $2}‘`

此命令表示监控网卡eth0,捕捉tcp,且21-22字节字符为GE或者PO,表示匹配GET或者POST请求的数据包,并写到/tmp/tcp.cap文件。
2、这时候我们得到最新10秒的二进制数据包文件,我们下一步就是通过strings命令来找出GET/POST的url以及Host。

  1. strings /tmp/tcp.cap | grep -E "GET /|POST /|Host:" | grep --no-group-separator -B 1 "Host:" | grep --no-group-separator -A 1 -E "GET /|POST /" | awk ‘{url=$2;getline;host=$2;printf ("%s\n",host""url)}‘ > url.txt

此命令是本文的关键,通过strings显示二进制文件tcp.cap所有可打印字符,然后通过grep和awk过滤出http请求,并把拼接得到的url(包括域名+uri)写进一个文件url.txt。
3、这时我们拿到了近10秒钟所有的访问url,接下来的统计就容易得出,比如:
统计QPS:

  1. (( qps=$(wc -l /tmp/url.txt | cut -d‘ ‘ -f 1) / 10 ))

排除静态文件统计前10访问url:

  1. grep -v -i -E "\.(gif|png|jpg|jpeg|ico|js|swf|css)" /tmp/url.txt | sort | uniq -c | sort -nr | head -n 10

转载请标明文章来源:《https://www.centos.bz/2014/07/count-http-request-with-tcpdump/

时间: 2024-11-25 17:48:50

借助tcpdump统计http请求的相关文章

spring项目如何统计所有请求的返回码--项目安全防刷统计

最近遇到个问题,一个简单的spring mvc的项目,但是经常被刷子刷,恶意暴力破解通信协议,不断尝试登陆系统,为了方便实时统计请求量和请求返回码的分布情况.最简单的逻辑:不断有人错误登陆,当次数多了,说明有问题了,有人在恶意刷我们的系统. 那么这个问题的一个重要环节就是统计所有请求的返回码,方便离线大数据的同学分析,怎么记录返回码呢?总不能每次都定义一个log,在每个return里进行log.info吧. returnMap.put("result", "500"

【移动前端开发实践】从无到有(统计、请求、MVC、模块化)H5开发须知

前言 不知不觉来百度已有半年之久,这半年是996的半年,是孤军奋战的半年,是跌跌撞撞的半年,一个字:真的是累死人啦! 我所进入的团队相当于公司内部创业团队,人员基本全部是新招的,最初开发时连数据库都没设计,当时评审需求的时候居然有一个产品经理拿了一份他设计的数据库,当时我作为一个前端就惊呆了...... 最初的前端只有我1人,这事实上与我想来学习学习的愿望是背道而驰的,但既然来都来了也只能独挑大梁,马上投入开发,当时涉及的项目有: ① H5站点 ② PC站点 ③ Mis后台管理系统 ④ 各种百度

tcpdump 之 arp请求,tcp的3次握手,4次断开,详解

一:环境说明: 1,my_recoder.tcpdump是我在服务器端抓包的文件 2,在这里,只显示与11.11.11.6主机相关的所有信息: 3,网络模型:同一个局域网 4,11.11.11.6 是客户机 5,11.11.11.8 是服务器 6,11.11.11.11 是网关 二:tcpdump抓包信息 [email protected]:~# tcpdump -r my_recoder.tcpdump -n  host 11.11.11.6  17:11:09.373704 ARP, Req

举例讲解Linux中tcpdump工具的应用

先来看一个比较基本的用法: tcpdump -i eth0 其中,eth0为参数值,表示需要抓包的网口,这是个必需参数哦. tcpdump的具体参数及意义: -i:指定tcpdump监听的网络接口 -s:指定要监听数据包的长度 -c:指定要监听的数据包数量,达到指定数量后自动停止抓包 -w:指定将监听到的数据包写入文件中保存 -A:指定将每个监听到的数据包以ACSII可见字符打印 -n:指定将每个监听到数据包中的域名转换成IP地址后显示 -nn:指定将每个监听到的数据包中的域名转换成IP.端口从

Nginx流量带宽请求状态统计(ngx_req_status)

介绍 ngx_req_status 用来展示 nginx 请求状态信息,类似于 apache 的 status, nginx 自带的模块只能显示连接数等等 信息,我们并不能知道到底有哪些请求.以及各 url 域名所消耗的带宽是多少. ngx_req_status 提供了这些功能 按域名. url. ip 等等统计信息 统计总流量 统计当前带宽\峰值带宽 统计总请求数量 安装   # cd /usr/local/src/ # wget "http://nginx.org/download/ngin

nginx流量带宽等请求状态统计( ngx_req_status)

介绍 ngx_req_status用来展示nginx请求状态信息,类似于apache的status,nginx自带的模块只能显示连接数等等信息,我们并不能知道到底有哪些请求.以及各url域名所消耗的带宽是多少.ngx_req_status提供了这些功能. 功能特性 按域名.url.ip等等统计信息 统计总流量 统计当前带宽\峰值带宽 统计总请求数量 1. 安装 # cd /usr/local/src/ # wget "http://nginx.org/download/nginx-1.4.2.t

Tcpdump用法

1.监听所有非echo requests/replies的ICMP数据包 //ICMP ECHO(Type 8) 和ECHO Reply (Type 0) #tcpdump "icmp[0] != 8 and icmp[0] != 0" 2.监听非本地网络的每次TCP会话开始和结束数据包 #tcpdump 'tcp[13] & 3 != 0 and not src and dst net localnet' 3.监听网关snup上长度大于576字节的IP数据包 #tcpdump

tcpdump详解

转自:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的"头"完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉无用的信息. 实用命令实例 默认启动

tcpdump 使用详解——转载

http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉无用的信息. 实用命令实例 默认启动 tcpd