环境:VMware-Workstation-12-Pro,Windows-10,CentOS-6.9-x86_64,Xshell5

基本介绍

tcpdump是Linux自带的抓包工具,可以详细看到计算机通信中详细报文内容,如果读者熟悉另一款

强大的抓包工具wireshark,tcpdump相当于是wireshark的命令行版本。dump这个单词有垃圾堆,

倒垃圾的意思,在计算机英语中的含义是转存。

tcpdump官网:http://www.tcpdump.org/

This is the official web site of tcpdump, a powerful command-line packet analyzer;

查看本机tcpdump的版本

[root@as4k html]# tcpdump --version
tcpdump version 4.1-PRE-CVS_2017_03_21

tcpdump的最新版本

Version: 4.9.2

Release Date: September 3, 2017

官方文档:http://www.tcpdump.org/manpages/tcpdump.1.html,此文档无疑是全网最详细,最权威

的教程,很多大牛的博客都有借鉴此文的内容。

这是什么鬼

TCPDUMP(8)                                                          TCPDUMP(8)  

NAME
tcpdump - dump traffic on a network SYNOPSIS
tcpdump [ -AdDefIJKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F file ]
[ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
[ -Q|-P in|out|inout ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ expression ]

上面是tcpdump,man page里面的内容,oh my god!这么多参数,本文当然不可能逐一介绍上面的内容,

我们先直接通过一些简单的案例看看效果,然后给出一些常见参数的用法。

基础案例

观察DNS解析情况

我们知道,Linux系统要想正常访问互联网,需要正确配置DNS解析,现在我们已经配置了阿里云的DNS

223.6.6.6,我们想看一下DNS解析是否正常,就可以使用tcpdump来抓取DNS包,准备好两个xshell

窗口,按照如下方式操作

步骤1 tcpdump -n -i any port 53

尽量在root用户下使用tcpdump命令,-n表示不要把IP地址解析成域名,-i表示抓取哪块网卡的通信

数据包,any表示任意一块,port是指定要抓取数据包的端口,DNS服务工作在53端口上,执行完毕之

后,我们切换到第2个窗口,进行步骤2

步骤2 ping -c3 baidu.com

-c3表示和ping次停下,这时候我们的计算机和百度产生的通信,窗口1的tcpdump就会监听到我们的通信

数据,也就是所谓的抓包,切换到窗口1,看到的数据大致如下

在上图中我们可看到本地192.168.56.11,端口42711进程向阿里云DNS服务器223.6.6.6,请求告知

baidu.com的IP地址是什么?阿里云的DNS服务器成功给了我们答复,由此可以说明,我们的DNS工作

正常。

如果抓取的DNS数据包,看起来向下面这样:

从上图可以看出,我们一共发起了三次DNS查询请求,服务器才最终给我们返回了IP地址,这显然是不太正常的,

由此我们可以判断,这次网络卡慢的原因,应该出在DNS解析上。

以上就是使用tcpdump抓包来简单判断网络通信状况。

抓取一个TCP包

首先我们知道TCP三次握手分别是:ACK,SYN-ACK,ACK。下面我们就在Linux中简单搭建nginx服务器,

然后使用tcpdump抓取tcp包看下。

安装nginx服务并启动

yum install nginx -y
/etc/init.d/nginx start

然后在windows浏览器中输入自己的IP地址,将会看到如下界面

在xshell中执行tcpdump -n -i eth0 port 80,eth0是我当前网卡的名称,然后在浏览器中刷新一下,

可以看到抓取到了如下内容

可以看到,我们熟悉的ACK,SYN-ACK,ACK三次握手的信息都出现了,说明我们TCP连接成功建立了。

不要太过纠结于抓包细节,事实上tcp协议包含相当多的内容,无法在此展开

tcpdump中最常见的几个参数

-i 指定要抓取数据包的网卡名称

tcpdump -i eth0 # 抓取eth0网卡的数据包

-c 指定抓取包的个数

tcpdump -i eth0 -c 10 # 只抓取10个包

-w 把抓取到的数据存放到文件中供以后分析

# tcpdump -i eth0 -c 10 -w my-packets.pcap
# file my-packets.pcap
my-packets.pcap: tcpdump capture file ....

可以看到,我们保存的my-packets.pcap是一种特殊文件,直接使用vim是无法查看的,可以把

该文件拿到windows下,使用wireshark查看,效果如下

-n 不解析ip,默认会将ip解析成域名

指定过滤端口(port)和主机名(host)

tcpdump -n -i eth0 port 80
tcpdump -n -i eth0 host baidu.com
tcpdump -n -i eth0 host baidu.com and port 80

参考资料

官方权威教程

http://www.tcpdump.org/manpages/tcpdump.1.html

漫画形式介绍tcpdump,非常有趣

https://jvns.ca/zines/#tcpdump

tcpdump-抓包工具-Linux的更多相关文章

  1. linux下利用tcpdump抓包工具排查nginx获取客户端真实IP实例

    一.nginx后端负载服务器的API在获取客户端IP时始终只能获取nginx的代理服务器IP,排查nginx配置如下 upstream sms-resp { server ; server ; } s ...

  2. tcpdump抓包工具

    tcpdump抓包工具 一:TCPDump介绍 ​ TcpDump可以将网络中传送的数据包的"头"完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and ...

  3. linux使用tcpdump抓包工具抓取网络数据包,多示例演示

    tcpdump是linux命令行下常用的的一个抓包工具,记录一下平时常用的方式,测试机器系统是ubuntu 12.04. tcpdump的命令格式 tcpdump的参数众多,通过man tcpdump ...

  4. Linux系统诊断必备技能之二:tcpdump抓包工具详解

    一.简述 TcpDump可以将网络中传送的数据包完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉无用的信息. Linux作为网络服 ...

  5. tcpdump抓包工具的基本使用

    为了更好的深入理解计算机网络等相关知识,例如TCP\UDP\IP等,我们就必须利用tcpdump.Wireshark等工具对网络进行分析.本篇博文主要记录一下tcpdump这个网络分析利器的一些基本使 ...

  6. Linux下通过tcpdump抓包工具获取信息

    介绍 tcpdump是网络数据包截获分析工具.支持针对网络层.协议.主机.网络或端口的过滤.并提供and.or.not等逻辑语句帮助去除无用的信息. tcpdump - dump traffic on ...

  7. tcpdump抓包工具用法说明

    tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上. 不带任何选项的tcpdump,默认会抓取第一个网络接口,且只有将tcpdump进程终止才会停止抓包. 例如: ...

  8. tcpdump抓包工具的使用

    个人原创,转载请注明,否则依法追究法律责任 2018-02-28  16:01:26 tcpdump 倾倒网络传输数据,直接启动tcpdump将监视第一个网络接口上所有流过的数据包. 1 不接任何参数 ...

  9. tcpdump 抓包工具使用

    1. 常用命令 监听p4p1网卡上来自 192.168.162.14 的包 tcpdump -i p4p1 src host 192.168.162.14 tcpdump -i p4p1 dst po ...

  10. 利用tcpdump抓包工具监控TCP连接的三次握手和断开连接的四次挥手

    TCP传输控制协议是面向连接的可靠的传输层协议,在进行数据传输之前,需要在传输数据的两端(客户端和服务器端)创建一个连接,这个连接由一对插口地址唯一标识,即是在IP报文首部的源IP地址.目的IP地址, ...

随机推荐

  1. 存储过程不返回记录集导致ADO程序出错

    HRESULT _hr = get_adoEOF(&_result); IsEOF()函数如下:其中ADOCG::_RecordsetPtr m_pRecordset; BOOL IsEOF( ...

  2. css之导航菜单的制作

    通过设置<a>的背景改变样式,通过a:hover改变交互效果,改变文字颜色color 纵向 <!DOCTYPE html> <html> <head lang ...

  3. List 和 ObservableCollection的区别

    在WPF中绑定一个集合的时候,比如:DataGrid.ItemsSource = new List<T>(); 这样的操作,会存在当数据行新增或者删除的时候不会得到及时的通知来刷新界面,而 ...

  4. Swift coreAnimation 加计时器写的游戏《飞机大战》

    近期在学习swift的动画和图层.就用现学的东西写了个游戏,基本思想 基本功能都实现了.图片都是在网上找得.希望能帮助大家更好的理解动画和图层. 声明下,我是刚開始学习的人,代码写的不好.大家应该都能 ...

  5. 更改嵌入式Linux中开机画面----左上角小企鹅图标

    一直想给嵌入式仪表加个开机LOGO,但是没有找到更换的方法.最近在网上收集了一些文章,整理一下一共自己参考.目前也还没有试过这种方法究竟是否可以.但察看Kernel源代码可以知道,Linux-2.6的 ...

  6. discuz 文档说明

    Discuz  文档说明 基于7.0的标准程序,部分与插件无关的文件不作说明 文件颜色说明: 红色:程序核心文件,修改这类文件时千万要注意安全! 橙色:做插件几乎不会用到的文件,大概了解功能就可以了, ...

  7. [置顶] Linux协议栈代码阅读笔记(二)网络接口的配置

    Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_io ...

  8. Angular基础---->AngularJS的使用(一)

    AngularJS主要用于构建单页面的Web应用.它通过增加开发人员和常见Web应用开发任务之间的抽象级别,使构建交互式的现代Web应用变得更加简单.今天,我们就开始Angular环境的搭建和第一个实 ...

  9. cursor:hand & cursor:pointer

    1.cursor:hand & cursor:pointer都是将鼠标设置为手形. 2.cursor:hand存在兼容性问题,firefox并不支持该属性值.但大部分主流浏览器支持cursor ...

  10. Excel 2010 Alt+; (分号) --- “只选定当前选定区域中的可视单元格”

    excel怎样把筛选出来的加上颜色? 1.选中筛选结果数据区域: 2.同时按下Alt+; (分号)键,选中筛选出的数据: 3.鼠标右键,设置单元格格式: 4.在弹出的对话框中,设置字体.背景颜色,即可 ...