一、为什么需要学这个

很多时候,开发环境上不会出现问题。但在测试或者现场时,总是会有很多莫名其妙的问题。

这时候,能在出问题的环境上,开启抓包,然后再去重现问题的话,这时候,就可以拿到第一手的资料了。

这对我们解决问题,是至关重要的。

以前在华为工作时,遇到一次问题,是电信客户投诉,一个第三方公司和我司都是电信的客户。第三方公司和我方通信的是一个

boss系统,通信是soap协议。

问题大概是boss系统对我方进行了请求,然后我方设备的应答不对。

当时还是新员工的我,心慌得一匹,傻傻地找自己系统的问题,日志看过来看过去都没问题。后来,找到一线的技术支持,

坚持要抓包才能方便分析问题后,技术支持给我抓了包。

结果一看,对方boss系统的参数有问题,我方是按照协议开发的。我方没问题。

然后就变成了第三方公司去向电信解释,当初为啥没按照协议开发,各种追责。。。

所以,抓包的重要性毋庸置疑。它既能协助我们快速定位一个bug,也能在问题发生时,将不是自己的锅甩出去。

下面就看看简单的tcpdump抓包吧。

二、tcpdump

这里可以查看其在linux中的manpage:

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

也可以参考这里:

https://danielmiessler.com/study/tcpdump/

tcpdump的命令的语法大概是:

一共两部分,前面那个大框里,都是各类选项。

其实真正重要的是第二个,expression。这个expression就是指定一个捕获时的过滤表达式,比如host 192.168.19.22,

这就是一个表达式,这个表达式的意思是:抓取本机和192.168.19.22之间的网络包。

如果你不指定的话,那就会把和所有机器间的网络包都捕获。

另外,最好能按照先选项,再表达式的顺序来写命令。因为表达式可以写得很复杂,和选项揉在一起,实在是不好看。

三、典型用法

1、指定端口号

我觉得端口号其实很常用,在服务器端,一般我们都知道应用对外开放的端口号,比如spring boot应用,tomcat应用这些,端口号是我们再熟悉不过的。

只要监听指定端口号的包,基本也就差不多了。

这两天折腾ftp,ftp有两个端口,20和21,一个是控制信号传输,一个是真正的数据传输。下面以ftp为例:

tcpdump -i eth1  -w ftp20  port 20 or port  21
表示:在eth1上网卡上监听(可以ifconfig查看),端口号为20或21,-w表示将包抓取到文件ftp20中。因为我们打算将文件传输到windows机器上,用wireshark分析。

2、指定host和端口号

服务端通常会接收来自各个客户端的请求,如果自己在现上环境抓包,我们可能希望只抓取和某台主机间的通信包。当然,端口号还是要指定的。

tcpdump    -i eth1 -w ftp21 host 10.15.4.46 and port 20 or port 21
表示:和上面差不多。主要是监听和10.15.4.46之间的包。

3、指定host、端口号、协议

如第二步所述,基本可以抓到我们想要的包。如下图,我们其实只关心ftp协议包,但是呢,抓下来的包里面,包含了各种协议,还需要我用ftp这种表达式去过滤:

能不能只抓ftp协议包?

当然可以。(这部分待更新)

4、linux下直接打印出抓的包的内容

tcpdump -i ens192 host 10.15.8.104 and tcp -Ann

-A:打印包的细节

-n:不将ip转换为hostname,避免dns查找

-nn:不转换协议和端口号,比如21端口就显示为21端口,不要显示为ftp

(Don't convert protocol and port numbers etc. to names either.)

此时,输出如下:

如果添加以下选项:

-X:数据包将会以16进制和ascii的方式显示。

tcpdump -i ens192 host 10.15.8.104 and tcp -AXnn

5、linux下抓包,不打印包的内容,只打印包头

 -vv    Even more verbose output.  For example, additional fields are printed from NFS reply packets, and SMB packets are fully decoded.

-vvv   Even more verbose output.  For example, telnet SB ... SE options are printed in full.  With -X Telnet options are printed in hex as well.
tcpdump -i ens192 host 10.15.8.104 and tcp -vnn

-v:

效果如下:

如果将-v替换为使用-vv:

如果要输出的信息要更少一点,可以使用:

tcpdump -i ens192 host 10.15.8.104 and tcp -qnn

-q:快速输出,只打印很少的协议内容

linux下抓包学习--tcpdump的使用的更多相关文章

  1. linux下抓包工具tcpdump详解

    本文转自:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 简介 用简单的话来定义tcpdump,就是:dump the ...

  2. Linux下抓包命令tcpdump

    本文内容来源于网络 PS:tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题 ...

  3. Linux下抓包工具tcpdump应用详解

      TCPDUMP简介 在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一.sniffer工具首先是为网络管理员和网络程序员进行网络分析而设计的.对于网络管理人员来说 ...

  4. Linux下抓包命令tcpdump的使用

    在linux下,可以使用 tcpdump 命令来抓取数据包. 主要用法如下: 过滤网卡 tcpdump -i eth0 #抓取所有经过网卡eth0数据包 tcpdump -i lo #抓取环回口的数据 ...

  5. 监控io性能、free、ps命令、查看网络状态、Linux下抓包 使用介绍

    第7周第2次课(5月8日) 课程内容: 10.6 监控io性能 10.7 free命令10.8 ps命令10.9 查看网络状态10.10 linux下抓包扩展tcp三次握手四次挥手 http://ww ...

  6. Linux centos7日常运维——监控io性能、free内存命令、ps进程命令、查看网络状态、linux下抓包

    一.监控io性能 Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令来查看初步定位问题.其中iostat可以给我们提供丰富的IO状态数据. iostat ...

  7. 【转】Linux系统抓包命令tcpdump使用实例

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

  8. 10.6 监控io性能 10.7 free命令 10.8 ps命令 10.9 查看网络状态 10.10 linux下抓包

    iostat sysstat 包里面包括 sar 和 iostat [root@centos7 ~]# iostat Linux 3.10.0-693.2.2.el7.x86_64 (centos7. ...

  9. linux下的抓包工具tcpdump

    1.由netstat查看网络情况,引出的TCP建立连接.终止连接过程,以及TCP状态分析: 2.Soap=XML+HTTP引出的HTTP协议分析: 3.Soap(Simple Object Acces ...

随机推荐

  1. IP冲突解决方案

    客人在我所供职的酒店上网的时候,经常会弹出一个对话框,显示一些提示,如上网的注意事项和消费标准等信息;并且有自己的电影和歌曲服务器,DHCP-server也是其中的一台服务器,宾馆.酒店就是用这台机器 ...

  2. input checkbox复选框点击获取当前选中状态jquery

    function checkAll(id) { //用is判断 // let checkStatus=$(id).is(':checked'); // console.log(checkStatus) ...

  3. redis 的hash数据类型

    hash的常用命令 1.hset hset key field value 将哈希表key中的域field的值设为value 如果key不存在,一个新的哈希表被创建并进行HSET操作 如果field是 ...

  4. 怎么设置BarTender中二维码大小为25*25

    有小伙伴近期问了小编一个问题,说客户需要25*25大小的QR Code二维码,用BarTender怎么做出来?想要指定条形码的大小,还得BarTender符号与版本选项来帮忙.本文小编就来给大家详细讲 ...

  5. oracle long类型转换成varchar2

    CREATE OR REPLACE FUNCTION LONG_TO_CHAR( in_rowid rowid,in_owner varchar,in_table_name varchar,in_co ...

  6. [转]WPF入口Application

    1.WPF和 传统的WinForm 类似, WPF 同样需要一个 Application 来统领一些全局的行为和操作,并且每个 Domain (应用程序域)中只能有一个 Application 实例存 ...

  7. 8 -- 深入使用Spring -- 1...2 Bean后处理器的用处

    8.1.2 Bean后处理器的用处 Spring提供的两个常用的后处理器: ⊙ BeanNameAutoProxyCreator : 根据Bean实例的name属性,创建Bean实例的代理. ⊙ De ...

  8. 【代码审计】711cms_V1.0.5前台XSS跨站脚本漏洞分析

      0x00 环境准备 711CMS官网: https://www.711cms.com/ 网站源码版本:711CMS 1.0.5 正式版(发布时间:2018-01-20) 程序源码下载:https: ...

  9. jekins构建通知邮件配置及邮件附件设置,jenkins构建通知邮件没有RF的log和report文件

    全局配置: 系统管理-系统设置-Extended E-mail Notification (本邮件是程序自动下发的,请勿回复!)<br/><br/>项目名称:$PROJECT_ ...

  10. SaltStack salt-run 命令

    salt-run 常见用法如下: salt-run manage.up # 查看在线的minion salt-run manage.down # 查看不在线的minion salt-run manag ...