专栏名称: 阿群1986
目录
相关文章推荐
Python爱好者社区  ·  “给我滚出贵大!”郑强出任贵州大学校长,打算 ... ·  3 天前  
Python爱好者社区  ·  python接私活,yyds ·  22 小时前  
Python爱好者社区  ·  DeepSeek 最新中国大学排名 ·  22 小时前  
Python开发者  ·  国产 DeepSeek V3 ... ·  4 天前  
Python爱好者社区  ·  史上最强!PINN杀疯了 ·  4 天前  
51好读  ›  专栏  ›  阿群1986

1.根据MAC地址抓包

阿群1986  · 简书  ·  · 2018-01-30 12:01

正文

(文/阿群)
本文随手记录一些底层网络协议的细节, 假定读者已经熟悉如何使用抓包工具 Wireshark 并且对以太网通讯协议有兴趣.

(以下正文)

--

打开Wireshark主程序, 指定一块网卡, 开始抓包.

这里我抓到一个典型HTTP网页请求包, 作为例子


MAC地址报头14字节

00 ec ac ce 91 37---f4 4d 30 1b bd b7---08 00

无论抓到哪种包, 从抓包记录中肯定能看见自己的网卡MAC地址.
MAC地址长度是6字节, 每一块网卡都有独一无二的MAC地址.
抓包记录中, 自己网卡的MAC地址和对方主机的MAC地址同时出现, 一共是12字节.
顺序是destination MAC在前, source MAC在后.

接下来还有2字节代表以太网数据类型.
EtherType=0x0800指明按照IPv4协议解析后续数据

EtherType 是以太帧里的一个int16字段,用来指明应用于帧数据字段选择的协议。
为了能够向前兼容早期实验阶段的以太网, 当EtherType的值>=0x0600即1536时这个桢才是以太网II型数据桢. 这个值小于1500时是兼容早期的以太网报文格式, 作为报文长度.

通过以太网层的MAC header里面的这个EtherType字段标记出接下来应该采用哪种具体的第三层协议解析报文, 第三层协议包括IPv4/ARP/PPPoE/802.1X等协议

参考: https://en.wikipedia.org/wiki/EtherType
EtherType 常见的编码包括:

  • 0x0800--IP(历史悠久的IPv4协议)
  • 0x0806--ARP地址查询
  • 0x86DD--IPv6
  • 0x8863/0x8864--PPPoE相关
    PPPoE方式拨号上网(大部分家庭宽带上网都是PPPoE)
  • 0x888E--EAPoE
    即大学校园常见的802.1X拨号验证客户端所采用的协议

# 附: 一个完整的HTTP请求包(含MAC/IP报头)
0000   00 ec ac ce 91 37 f4 4d 30 1b bd b7 08 00 45 00  .....7.M0.....E.
0010   01 a5 66 95 40 00 80 06 00 00 c0 a8 00 19 c0 a8  ..f.@...........
0020   00 61 6c df 00 50 bb 0d 8b bd 38 5a f6 89 50 18  .al..P....8Z..P.
0030   08 05 83 62 00 00 47 45 54 20 2f 20 48 54 54 50  ...b..GET / HTTP
0040   2f 31 2e 31 0d 0a 48 6f 73 74 3a 20 31 39 32 2e  /1.1..Host: 192.
0050   31 36 38 2e 30 2e 39 37 0d 0a 43 6f 6e 6e 65 63  168.0.97..Connec
0060   74 69 6f 6e 3a 20 6b 65 65 70 2d 61 6c 69 76 65  tion: keep-alive
0070   0d 0a 55 73 65 72 2d 41 67 65 6e 74 3a 20 4d 6f  ..User-Agent: Mo
0080   7a 69 6c 6c 61 2f 35 2e 30 20 28 57 69 6e 64 6f  zilla/5.0 (Windo
0090   77 73 20 4e 54 20 31 30 2e 30 3b 20 57 69 6e 36  ws NT 10.0; Win6
00a0   34 3b 20 78 36 34 29 20 41 70 70 6c 65 57 65 62  4; x64) AppleWeb
00b0   4b 69 74 2f 35 33 37 2e 33 36 20 28 4b 48 54 4d  Kit/537.36 (KHTM
00c0   4c 2c 20 6c 69 6b 65 20 47 65 63 6b 6f 29 20 43  L, like Gecko) C
00d0   68 72 6f 6d 65 2f 36 33 2e 30 2e 33 32 33 39 2e  hrome/63.0.3239.
00e0   31 33 32 20 53 61 66 61 72 69 2f 35 33 37 2e 33  132 Safari/537.3
00f0   36 0d 0a 55 70 67 72 61 64 65 2d 49 6e 73 65 63  6..Upgrade-Insec
0100   75 72 65 2d 52 65 71 75 65 73 74 73 3a 20 31 0d  ure-Requests: 1.
0110   0a 41 63 63 65 70 74 3a 20 74 65 78 74 2f 68 74  .Accept: text/ht
0120   6d 6c 2c 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78  ml,application/x
0130   68 74 6d 6c 2b 78 6d 6c 2c 61 70 70 6c 69 63 61  html+xml,applica
0140   74 69 6f 6e 2f 78 6d 6c 3b 71 3d 30 2e 39 2c 69  tion/xml;q=0.9,i
0150   6d 61 67 65 2f 77 65 62 70 2c 69 6d 61 67 65 2f  mage/webp,image/
0160   61 70 6e 67 2c 2a 2f 2a 3b 71 3d 30 2e 38 0d 0a  apng,*/*;q=0.8..
0170   41 63 63 65 70 74 2d 45 6e 63 6f 64 69 6e 67 3a  Accept-Encoding:
0180   20 67 7a 69 70 2c 20 64 65 66 6c 61 74 65 0d 0a   gzip, deflate..
0190   41 63 63 65 70 74 2d 4c 61 6e 67 75 61 67 65 3a  Accept-Language:
01a0   20 7a 68 2d 43 4e 2c 7a 68 3b 71 3d 30 2e 39 0d   zh-CN,zh;q=0.9.
01b0   0a 0d 0a                                         ...

易混淆的概念以及缩略词

  1. packet、datagram和frame
    packet和datagram都被翻译为报文或数据包. datagram是packet的一个子类. 使用术语datagram暗示将通过不可靠的传输服务进行数据收发, 允许中间过程丢失数据包. (可以想象发无线电报的情形). 所有的 IP packet 都具备 datagram 的特性.







请到「今天看啥」查看全文