1.启动

普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包,注意这里使用超级用户。当用户上网得时候,就会将监视得数据打印出来。

我没使用root用户,结果输入tcpdump命令,提示:

tcpdump: packet printing is not supported for link type BLUETOOTH_HCI_H4_WITH_PHDR: use –w

2.简单实例

监听网卡(我的网卡号是eno16777736)

# tcpdump -i eno16777736

监听指定协议的数据

# tcpdump -i eno16777736 -nn 'icmp'  (-nn的功能是用ip地址表示主机。)

说明: 这个是用来监听icmp协议的数据,就是ping命令使用的协议。类似的,如果要监听tcp或者是udp协议,只需要修改上例的icmp就可以了。

3.针对网络接口、端口和协议的数据包截取。

我在虚拟机上运行了一个TCP服务端程序,接收数据,端口为9877,本机上运行客户端发送数据,然后用tcpdump抓包:

# tcpdump -w test.pcap -i eno16777736 tcp port 9877

运行客户端发送数据完成之后,结束抓包(按ctrl+ c中断tcpdump命令的执行)就会在当前目录下生成一个test.pcap文件。

这个文件可以用抓包工具wireshark来分析,直接打开就可以看到这个pcap文件的信息,实际就是TCP数据包格式存储的数据,熟悉TCP格式的话基本都能看懂了。

4.数据包分析

以上一个为例,抓了一个发送“HelloSocket!”的数据包,命令行提示:

5 packets captured
5 packets received by filter
0 packets dropped by kernel

就是抓了5个包(?)。

TCP包最大能容纳65535字节数据,于是我就试想发送一个65535字节的数据,会不会抓到6个,然而提示的是:

13 packets captured
13 packets received by filter
0 packets dropped by kernel

也就是说抓了13个包。原来IP层有个MUT的概念,也就是分片。而且第一次显示的是5个包,第二次显示的是13个包,为何数据量小于MUT不是1个包,经过分析才知道,服务器上面的抓包命令不但抓了收到数据“HelloSocket!”的数据包,还把TCP三次握手的包夜抓了,每次握手传一个包,就是3个包(注意包括服务器发送出去的包),最后还有个XXXXXXXXXXXX包。想要只抓数据包,得修改命令参数,后面补充。

通过这次抓包,可以明显观察到TCP三次握手的情景(下图1,2,3步就是TCP三次握手情形,参考《UNIX网络编程卷1,第三版》,第2.6节TCP连接的建立和终止):

另外,第二次抓包有一个TCP的状态为PSH,如下图(第12步):

我看了一下TCP状态说明,PSH表示有 DATA数据传输,前面第十步,第八步都有数据传输,为何没有PSH呢?

最新文章

  1. ffmpeg-20160908[09,10,13,15,19,21,22,24]-bin.7z
  2. Google play billing(Google play 内支付)
  3. jvm垃圾回收的时间问题
  4. !! python 之半年总结
  5. HDU 1498 50 years, 50 colors(最小点覆盖,坑称号)
  6. jsp 重定向技术
  7. Windows环境下Android Studio安装和使用教程
  8. SOFA 源码分析 — 负载均衡和一致性 Hash
  9. Thymeleaf【快速入门】
  10. 通过FileReader和FileWriter实现复制文件的方法。
  11. CF数据结构练习(二)
  12. [PA2014]Bohater
  13. php 多线程
  14. Python——多进程
  15. 洛谷P2879 [USACO07JAN]区间统计Tallest Cow
  16. C#------如何处理缺少对公共可见类型或成员的xml注释的警告
  17. 实用的IOS应用程序框架
  18. 在python命令行执行sudo命令
  19. POJ 1113 Wall 凸包 裸
  20. 公司git流程图,广告业务术语

热门文章

  1. yum 安装报错:Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"
  2. 2018.12.15 spoj Longest Common Substring II(后缀自动机)
  3. 连接oracle数据库报错:TNS-12516 TNS:listener could not find available handler with matching protocol stack解决方法
  4. Mybatis-Plus 实战完整学习笔记(一)------简介
  5. hadoop yarn组件介绍
  6. SQL优化实战之加索引
  7. 好文推荐系列--------(2)GruntJS——重复乏味的工作总会有人做(反正我不做)
  8. 安装mysql后必做的两件事
  9. CMake和静态库顺序
  10. 顺序表[A+B->A]