tcpdump抓取HTTP包

http://blog.csdn.net/kofandlizi/article/details/8106841


cpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854

 

0x4745 为"GET"前两个字母"GE"

0x4854 为"HTTP"前两个字母"HT"


说明: 通常情况下:一个正常的TCP连接,都会有三个阶段:1、TCP三次握手;2、数据传送;3、TCP四次挥手

里面的几个概念:

  • SYN: (同步序列编号,Synchronize Sequence Numbers)
  • ACK: (确认编号,Acknowledgement Number)
  • FIN: (结束标志,FINish)

TCP三次握手(创建 OPEN)

  1. 客户端发起一个和服务创建TCP链接的请求,这里是SYN(J)
  2. 服务端接受到客户端的创建请求后,返回两个信息: SYN(K) + ACK(J+1)
  3. 客户端在接受到服务端的ACK信息校验成功后(J与J+1),返回一个信息:ACK(K+1)
  4. 服务端这时接受到客户端的ACK信息校验成功后(K与K+1),不再返回信息,后面进入数据通讯阶段

数据通讯

  1. 客户端/服务端 read/write数据包

TCP四次握手(关闭 finish)

  1. 客户端发起关闭请求,发送一个信息:FIN(M)
  2. 服务端接受到信息后,首先返回ACK(M+1),表明自己已经收到消息。
  3. 服务端在准备好关闭之前,最后发送给客户端一个 FIN(N)消息,询问客户端是否准备好关闭了
  4. 客户端接受到服务端发送的消息后,返回一个确认信息: ACK(N+1)
  5. 最后,服务端和客户端在双方都得到确认时,各自关闭或者回收对应的TCP链接。

详细的状态说明(以及linux相关参数调整)

  1. SYN_SEND
    • 客户端尝试链接服务端,通过open方法。也就是TCP三次握手中的第1步之后,注意是客户端状态
    • sysctl -w net.ipv4.tcp_syn_retries = 2 ,做为客户端可以设置SYN包的重试次数,默认5次(大约180s)引用校长的话:仅仅重试2次,现代网络够了
  2. SYN_RECEIVED
    • 服务接受创建请求的SYN后,也就是TCP三次握手中的第2步,发送ACK数据包之前
    • 注意是服务端状态,一般15个左右正常,如果很大,怀疑遭受SYN_FLOOD攻击
    • sysctl -w net.ipv4.tcp_max_syn_backlog=4096 , 设置该状态的等待队列数,默认1024,调大后可适当防止syn-flood,可参见man 7 tcp
    • sysctl -w net.ipv4.tcp_syncookies=1 , 打开syncookie,在syn backlog队列不足的时候,提供一种机制临时将syn链接换出
    • sysctl -w net.ipv4.tcp_synack_retries = 2 ,做为服务端返回ACK包的重试次数,默认5次(大约180s)引用校长的话:仅仅重试2次,现代网络够了
  3. ESTABLISHED
    • 客户端接受到服务端的ACK包后的状态,服务端在发出ACK在一定时间后即为ESTABLISHED
    • sysctl -w net.ipv4.tcp_keepalive_time = 1200 ,默认为7200秒(2小时),系统针对空闲链接会进行心跳检查,如果超过net.ipv4.tcp_keepalive_probes * net.ipv4.tcp_keepalive_intvl = 默认11分,终止对应的tcp链接,可适当调整心跳检查频率
    • 目前线上的监控 waring:600 , critial : 800
  4. FIN_WAIT1
    • 主动关闭的一方,在发出FIN请求之后,也就是在TCP四次握手的第1步
  5. CLOSE_WAIT
    • 被动关闭的一方,在接受到客户端的FIN后,也就是在TCP四次握手的第2步
  6. FIN_WAIT2
    • 主动关闭的一方,在接受到被动关闭一方的ACK后,也就是TCP四次握手的第2步
    • sysctl -w net.ipv4.tcp_fin_timeout=30, 可以设定被动关闭方返回FIN后的超时时间,有效回收链接,避免syn-flood.
  7. LASK_ACK
    • 被动关闭的一方,在发送ACK后一段时间后(确保客户端已收到),再发起一个FIN请求。也就是TCP四次握手的第3步
  8. TIME_WAIT
    • 主动关闭的一方,在收到被动关闭的FIN包后,发送ACK。也就是TCP四次握手的第4步
    • sysctl -w net.ipv4.tcp_tw_recycle = 1 , 打开快速回收TIME_WAIT,Enabling this option is not recommended since this causes problems when working with NAT (Network Address Translation)
    • sysctl -w net.ipv4.tcp_tw_reuse =1, 快速回收并重用TIME_WAIT的链接, 貌似和tw_recycle有冲突,不能重用就回收?
    • net.ipv4.tcp_max_tw_buckets: 处于time_wait状态的最多链接数,默认为180000.

其他网络重要参数

net.ipv4.tcp_rmem 参数

  • 默认值: min=4096 default=87380 max=4194304

net.ipv4.tcp_wmem 参数

  • 默认值: min=4096 default=16384 max=4194304


tcpdump

tcpdump是linux系统自带的抓包工具,主要通过命令行的方式,比较适合在线上服务器进行抓包操作,如果是windows或者ubuntu完全可 以选择一些图形化的工具,ubuntu比较推荐用wireshark,安装方式很简单sudo apt一下即可。

命令行格式:

tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ][ -i 网络接口 ] [ -r 文件名] [ -s snaplen ][ -T 类型 ] [ -w 文件名 ] [表达式 ]

常用的参数:

-l    使标准输出变为缓冲行形式;
-n    不把网络地址转换成名字;

-c    在收到指定的包的数目后,tcpdump就会停止;
-i    指定监听的网络接口;(如果没有指定可能在默认网卡上监听,需要指定绑定了特定IP的网卡)
-w    直接将包写入文件中,并不分析和打印出来;
-s 指定记录package的大小,常见 -s 0 ,代表最大值65535,一半linux传输最小单元MTU为1500,足够了

-X 直接输出package data数据,默认不设置,只能通过-w指定文件进行输出

常用表达式:

  1. 关于类型的关键字,主要包括host,net,port
  2. 传输方向的关键字,主要包括src , dst ,dst or src, dst and src
  3. 协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型
  4. 逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'||'
  5. 其他重要的关键字如下:gateway, broadcast,less,greater

实际例子:

1. http数据包抓取 (直接在终端输出package data)

tcpdump tcp port 80 -n -X -s 0 指定80端口进行输出

2. 抓取http包数据指定文件进行输出package

tcpdump tcp port 80 -n -s 0 -w /tmp/tcp.cap

对应的/tmp/tcp.cap基本靠肉眼已经能看一下信息,比如http Header , content信息等

3. 结合管道流

tcpdump tcp port 80 -n -s 0 -X -l | grep xxxx

这样可以实时对数据包进行字符串匹配过滤

4. mod_proxy反向代理抓包

线上服务器apache+jetty,通过apache mod_proxy进行一个反向代理,80 apache端口, 7001 jetty端口

apache端口数据抓包: tcpdump tcp port 80 -n -s 0 -X -i eth0   注意:指定eth0网络接口

jetty端口数据抓包: tcpdump tcp port 7001 -n -s 0 -X -i lo 注意:指定Loopback网络接口

5. 只监控特定的ip主机

tcpdump tcp host 10.16.2.85 and port 2100 -s 0 -X 

需要使用tcp表达式的组合,这里是host指示只监听该ip

小技巧:

1. 可结合tcpdump(命令) + wireshark(图形化)

操作: 

  • 在服务器上进行tcpdump -w /tmp/tcp.cap 指定输出外部文件
  • scp /tmp/tcp.cap 拷贝文件到你本地
  • wireshark &  启动wireshark
  • 通过 File -> Open  打开拷贝下来的文件,这样就可以利用进行数据包分析了
  • 剩下来的事就非常方便了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cobbler工作流分析

官网 http://cobbler.github.io/ 介绍 Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows。该工具使用python开发,小巧轻便,使用简单的命令即可完成PXE网络安装环境的配置,同时还可以管理DHCP、DNS、…

数学到底有多难难难难?看完这个,瞬间觉得智商都提高了!

▲ 点击查看数学家陈省身曾说过,我们每个人一生都花了很多时间学数学,但我们其实只是学会了计算,而不是数学。不知道你有没有听说过这样一句话:想要学好数学,就要靠刷题。尽管我们不得不承认,确实需要不断地…

Redis常用概念简介

Redis支持五种数据类型1、string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。string类型是Redis最基本的数据类…

.net Mvc Controller 接收 Json/post方式 数组 字典 类型 复杂对象

原文地址:http://www.cnblogs.com/fannyatg/archive/2012/04/16/2451611.html ------------------------------------------------------------------------------------------------------------------ Asp.net Mvc Controller Json数组接收数组字典 类型 复杂对象…

SparkSQL DataFrame进阶篇

SparkSQL DataFrame基础篇 SparkSQL DataFrame进阶篇 1.创建SparkSession【2.0】和 SQLContext实例【1.x】 1.创建SparkSession【2.0】 ///spark2.0后,用sparksession代替sparkcontext和sqlcontext的创建 val spark SparkSession.builder().appName("SparkS…

matlab机械臂工作空间代码_【ROS-Moveit!】机械臂控制探索(3)——基于python的API示例代码分析...

本文参考Moveit!官方文档。系统:ubuntu 18.04 / 16.04ROS:Melodic / Kinetic概述基于python的运动组API是最简单的MoveIt!用户接口。其中提供了用户常用的大量功能封装,例如:设置目标关节控制或笛卡尔空间位置创建运动规划移动机器…

ubuntu如何杀死进程

一、得到所有进程 先用命令查询出所有进程 ps -ef 二、杀死进程 我们使用ps -ef命令之后,就会得到一些列进程信息,有进程pid什么的,如果你要杀死莫个进程的话,直接使用命令kill pid

Oracle to_char() to_date() to_number()函数

TO_CHAR 是把日期或数字转换为字符串TO_DATE 是把字符串转换为数据库中得日期类型转换函数TO_NUMBER 将字符转化为数字 TO_CHAR 使用TO_CHAR函数处理数字 TO_CHAR(number, 格式) TO_CHAR(salary,’$99,999.99’); 使用TO_CHAR函数处理日期 TO_CHAR(date,’格式’);  TO_NUM…

妄想性仮想人格障害 新手教程 +改动器

记得上次 HM 教程以后 我如今 继续写 Teatime 新作新手教程 首先我说下 此游戏 模式 AI2机械迷城 一共同拥有5关,结局从文本分析应该至少有两个 本文不是教你怎么玩通结局 安装没什么说的,APP就能够还不明确的上网找找教程 进入游戏后 首先要注意 上面的时间,一个是MM 生命 另外…

如何在宝塔面板启用 ASP.NET CORE 网站并自动申请 HTTPS 证书

要想在 Linux 上部署 ASP.NET CORE 网站,除了使用“宇内流云”大神的 Jexus 之外就是使用 Nginx 对 ASP.NET CORE 网站进行反向代理。常规的做法是在服务器上部署完成 ASP.NET 运行环境、网站程序之后,使用 Supervisor 对网站程序进程进行守护。网站程序…

竟然有如何奇葩的如厕方式......

1 密集恐惧症一下子都好啦(素材来源网络,侵删)▼2 请选择适合您的如厕方式(素材来源网络,侵删)▼3 为什么当年的粉丝没有现在像这样互掐(素材来源网络,侵删)▼4 怕什么…

crm开源系统 tp框架_八个开源的 Spring Boot 前后端分离项目,一定要收藏!

点击蓝色字关注我们前后端分离已经在慢慢走进各公司的技术栈,不少公司都已经切换到这个技术栈上面了。即使贵司目前没有切换到这个技术栈上面,也非常建议大家学习一下前后端分离开发,以免在公司干了两三年,SSH 框架用的滚瓜烂熟&a…

Spark运行原理剖析

http://ihoge.cn/2018/Spark%20Scheduler.html Apache Spark是一个开源的,强大的分布式查询和处理引擎。它提供MapReduce的灵活性和可扩展性,但速度明显更高。 Spark的核心是根据RDD来实现的,Spark Scheduler则为Spark核心实现的重要一环…

硬盘检测工具Smartmontools安装、部署、使用

在服务器管理的实际环境中,硬盘是最容易出现问题及发生故障的硬件,而且硬盘中存储着大量重要的数据,万一出现故障所造成的损失也是无法估计的,轻则需要化费大量的时间与精力去做数据恢复,重则硬盘报废,里面…

【转】Python可变长度的函数参数

http://www.pythoner.com/4.html转载于:https://www.cnblogs.com/liangnote/p/3964062.html

那些奇奇怪怪的男性用品......

1 原来浣熊竟是我自己(素材来源网络,侵删)▼2 能不能对全靠运气(素材来源网络,侵删)▼3 万万没想到是这个结局(素材来源网络,侵删)▼4 真实版出猪车(素材来…

Android之getCacheDir()和getFilesDir()方法区别

getCacheDir()和getFilesDir()方法区别. Activity提供了getCacheDir()和getFilesDir()方法: getCacheDir()方法用于获取/data/data//cache目录getFilesDir()方法用于获取/data/data//files目录//将文件写入SD卡内:获取SDCard的状态:Environment.getExtemalStorageSt…

.Net Minimal API 介绍

Minimal APIs 是.Net 6 中新增的模板,借助 C# 10 的一些特性以最少的代码运行一个 Web 服务。本文脱离 VS 通过 VS Code,完成一个简单的 Minimal Api 项目的开发。创建项目新建一个文件夹,用来管理我们的项目文件,文件夹内启动命令…

access 子窗体 鼠标滚动不工作_Python GUI项目实战(五)明细信息窗体的完善

前言上一节我们实现了明细窗体GUI的搭建,并且设置了查看、修改、添加三种不同的状态,框架搭建好了,内容并没有填充,本节我们继续完善这个项目,将学生信息填充进明细窗体中。一、填充当前学生信息1.需求目前我们已经实现…

弹性式分布数据集RDD——Pyspark基础 (二)

连载中:http://ihoge.cn/tags/pyspark/ title: 弹性式分布数据集RDD——Pyspark基础 (二) date: 2018-04-15 17:59:21 comments: true categories: - Spark tags: - pyspark RDD的内部运行方式 RDD不仅是一组不可变的JVM(…