【计算机网络】网络抓包
网络抓包
tcpdump和Wireshark工具
下载
ubuntu环境下安装tcpdump
sudo apt-get install tcpdump
tcpdump的底层依赖是libpcap库,
所以也可以安装一下libpcap
sudo apt-get install libpcap-dev
然后可以用这个库来写一个查看网卡号的小demo
//调用libpcap库的头文件
#include <pcap.h>
#include <stdio.h>
int main(int argc,const char *argv[])
{
char errBuf[PCAP_ERRBUF_SIZE],*device;
device = pcap_lookupdev(errBuf);
if(device)
{
printf("success: device:%s\n",device);
}
else
{
printf("error:%s\n",errBuf);
}
return 0;
}
运行的时候需要连接libpcap的动态库
gcc file.c -lpcap
动态库的位置:

安装Wireshark
官网
基本上一直点击下一步就可以了
网络分析工具——WireShark的使用(超详细)
tcpdump的使用
tcpdump -i eth1 icmp and host 183.232.231.174 -nn
-i eth1 抓取eth1网口的数据包
icmp 抓取icmp协议的数据包
host 主机过滤,抓取对应IP的数据包
-nn 表示不解析IP地址和端口号名称
输出格式:
时间戳 协议 源地址.源端口 > 目的地址.目的端口 网络包详细信息
ping命令
ping 测试网络是否畅通的工具,最简单的用法就是ping+IP
发送的是ICMP
ICMP协议是英特网控制消息协议,是TCP/IP协议的子协议,用于在ip主机,路由器之间传递控制消息
1.如果是域名,先进行域名解析到具体的一个IP
2.将要ping的IP地址和自己的子网掩码进行与运算,得出相应的网段号
3.然后到自己的电脑里的路由表里查询是否有到这个网段的路由,如果没有就走默认路由,会有下一跳地址
4.查看本机arp缓存表里面是否有下一跳地址的mac地址,如果有就直接封装,如果没有就发arp广播获得下一跳地址的mac地址
5.得到了mac地址后,封装好数据,走物理层(网线)送出数据
举例说明:本机IP:192.168.0.237/24,ping 192.168.90.1的过程:
1.拿目的IP :192.168.90.1和自己的子网掩码进行与运算,得到目的网段:192.168.90.0
2.查看本机的路由表,是否有到达这个网段的路由,如果没有就走默认路由,下一跳地址为:192.168.0.1
3.查看本机arp缓存表里是否有下一跳地址192.168.0.1的Mac地址,如果有就直接封装帧,如果没有,就发arp广播获得192.168.0.1的Mac地址
4.得到了Mac地址后,封装好数据,走物理层送出数据。
信息含义:
- bytes值:表示通信过程中发送的数据包大小,单位是字节。
- icmp_seq:ping序列
- time值:表示响应时间,这个时间越小,说明你与对方通信的速度越快,延时越短。
- TTL值:Time To Live,表示数据包再经过多少个路由器如果还不能到达就将被丢弃,这里可以通过Ping返回的TTL值大小,粗略地判断目标系统类型是Windows系列还是UNIX/Linux系列。默认情况下,Linux系统的TTL最大值为64或255,WindowsNT/2000/XP系统的TTL最大值为128,UNIX主机的TTL最大值为255。
ICMP数据包的格式图



curl命令
curl命令获取指定URL的网页内容,并将其输出到终端
curl [选项][URL]
curl www.baidu.com
上传文件
curl -X POST -F "file=@/path/to/file" https://www.example.com/upload
向https://www.example.com/upload发送HTTP POST请求,将/path/to/file文件上传到服务器。
下载文件
curl -o filename https://www.example.com/file
从https://www.example.com/file下载文件,并保存为filename

抓取tcp的数据包:
sudo tcpdump -i enp0s3 tcp and host 153.3.238.102
-i enp0s3 抓取enp0s3网口的数据包
tcp 抓取tcp协议的数据包
host 主机过滤,抓取对应IP的数据包

sudo tcpdump -i enp0s3 tcp and host 153.3.238.102 -w tcp_sys_timeout.pcap
-w tcp_sys_timeout.pcap 把抓取到的数据包保存到tcp_sys_timeout.pcap文件
接着把 ping.pcap 文件拖到电脑,再用 Wireshark 打开它。打开后,你就可以看到下面这个界面:
数据包列表:编号 时间戳,源地址,目标地址,协议,长度,数据包信息
不同的协议有不同的颜色区分
TCP(数据流协议)SOCK_STREAM
因此可以用Wireshark的流量图更加直观的看到数据流的传输过程:
统计- > 流量图
数据包详细信息
在数据包列表选中某一个数据包,可以看到数据包详细信息,可以查看协议中的每一个字段


Sequence Number(seq):32bit,表示tcp包的序列号,根据seq来确认是否有数据包丢失。
可以理解为:我已经发出了多少数据
Acknowledgment Number(ack):32bit,表示tcp包的确认号。表示已经收到对方多少数据。
可以理解为:我已经接收了多少数据
发出带有SYN或FIN标志的报文,seq需要+1;只带有ACK标志的报文,seq不需要+1。
更多推荐



所有评论(0)