如何捕获ARP包
- telnet
- tcpdump
- 命令
- arp -a 查看arp高速缓存
- tcpdump -i 网络接口 arp:监听的网络接口的ARP
- tcpdump -D 查看可以监听的网络接口
网络层(IP协议)
- 协议组成
- 版本:4位
- 首部长度:4为,需要注意的,是指首部占四个字节的数目,15*4, 首部最长为60字节
- 服务类型:8位,大部分实现不支持,无需关注
- 总长度:16位,所以最大IP数为65535
- 标识:16位,唯一标识主机发送的每一分数据包
- 32位标志+13位片偏移,暂不关注
- 生存时间:8位,数据包最多可经过的路由数(每经过一个路由,就减掉一个,等长度为0的时候就直接把这个IP包丢弃,防止出现回路的问题)
- 上层协议:8位,表明IP数据报对应的上层协议是什么
- 首部校验和:16位,保证IP数据包传输争取
- 源IP地址:32位
- 目的IP:32位
- 可以使用
netstat -rn
命令查看,大致类型如下
Destination(目标) | Gateway(网关) | Flags(标志) | Refs | Use | Netif(接口) | Expire |
---|---|---|---|---|---|---|
default | 192.168.0.1 | UGSc | 52 | 0 | en0 | |
127 | 127.0.0.1 | UCS | 0 | 0 | lo0 | |
127.0.0.1 | 127.0.0.1 | UH | 3 | 109145 | lo0 | |
192.168.0.1/32 | link#5 | UCS | 2 | 0 | en0 | |
192.168.0.1 | ff:ff:ff:ff:ff:ff | UHLWbI | 0 | 4 | en0 | |
192.168.0.1 | 58:d9:d5:ac:xx:xx | UHLWIir | 10 | 96 | en0 | 1132 |
IP路由选择
- 每一个IP数据包在网络中进行传输的目的,要找到目的IP的地址,并最终到达该主机。所以IP数据包经过的每一个节点都相当于是一个中转站,就是路由。
- IP数据包被路由节点的操作称为路由选择
常规路由机制:
- 目的主机与源主机直接相连,或处于共享网络,直接送达目标主机
- 默认转发至该网络存在的路由器上,再由其统一处理
路由匹配算法
- 路由表中存在与目的IP完全相同的条目,直接发送至下一条
- 路由表中存在与IP地址网络号相同的条目,发送至该条目指定的下一条
- 以上条件均不成立,寻找默认条目,发送至该条目指定的下一条
- 均不成立,返回主机不可达错误
- 可以使用
traceroute xxxx.xxx
命令查看匹配步骤
几个常用命令
- ifconfig: 查看网络接口
- netstat -rn: 查看路由表
- netstat -in: 查看接口信息
// 这里是以百度为栗子 1. 在终端输入 traceroute baidu.com 2 打印出下边的结果,因为一直匹配,所以需要我们手动(control + c)关闭下 traceroute: Warning: baidu.com has multiple addresses; using 220.181.57.216 traceroute to baidu.com (220.181.57.216), 64 hops max, 52 byte packets 1 192.168.0.1 (192.168.0.1) 21.687 ms 5.716 ms 2.463 ms 2 10.1.1.1 (10.1.1.1) 4.174 ms 2.637 ms 2.956 ms 3 100.64.0.1 (100.64.0.1) 39.310 ms 32.048 ms 6.339 ms 4 202.105.154.29 (202.105.154.29) 4.819 ms 202.105.157.117 (202.105.157.117) 39.546 ms 202.105.154.21 (202.105.154.21) 12.349 ms 5 183.56.66.6 (183.56.66.6) 16.777 ms 183.56.65.46 (183.56.65.46) 18.695 ms 183.56.65.42 (183.56.65.42) 16.504 ms 6 202.97.65.209 (202.97.65.209) 67.375 ms 40.033 ms 36.901 ms 7 220.181.177.74 (220.181.177.74) 37.481 ms 180.149.159.6 (180.149.159.6) 41.551 ms * // 使用ifconfig Netif 查看接口信息 // 例如在终端输入 ifconfig en0,打印出如下信息 en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 6c:40:08:b7:51:f0 inet6 fe80::43a:4fa4:812d:25f2%en0 prefixlen 64 secured scopeid 0x5 inet 192.168.0.101 netmask 0xffffff00 broadcast 192.168.0.255 nd6 options=201<PERFORMNUD,DAD> media: autoselect status: active
后记
因为我这里也是临时抱佛脚,简单的查看了一下,没有深入的研究,尤其是很多参数并不知道其中的含义,只能以后再看了(偷偷的立一个flag),等以后深入学习的时候再回头补全这篇文章