码迷,mamicode.com
首页 > Web开发 > 详细

Socket与网站保密应用 (隐藏链接的视频下载)

时间:2015-08-10 22:25:17      阅读:612      评论:0      收藏:0      [点我收藏+]

标签:actionscript   javascript   tcp   

Flash Socket应用


页面使用 Socket 底层传输数据的方便比传统的 HTTP 协议更隐秘,浏览器基本不对基于 TCP 通信的 Socket 进行监测,因此也无法通过浏览器提供的开发者工具来探测网站的受保护数据。例如,音悦台网站上的高铃 - 爱してる-高清【MV】,其视频内容通过 Socket 进行传输,浏览者根本发现不了其视频数据,也无法找到浏览器有缓存到数据。 

打开视频网页: http://v.yinyuetai.com/video/37962 


但,使用其他工具还是可以找到服务器所在的,Windows 下就有 netstat 命令可以检测到,注意 843 端口,这是 Flash Socket 用来安获取 crossDomain.xml 的首选端口:

C:\>netstat -a -o -b -p TCP

活动连接

  协议  本地地址                外部地址                状态           PID
  TCP    192.168.1.200:59539    125.89.72.215:http     ESTABLISHED     1128
 [chrome.exe]
  TCP    192.168.1.200:59548    219.232.246.244:http   ESTABLISHED     1128
 [chrome.exe]
  TCP    192.168.1.200:61073    125.89.74.163:http     TIME_WAIT       0
  TCP    192.168.1.200:60700    14.17.110.3:843        TIME_WAIT       0
  TCP    192.168.1.200:60701    14.17.110.3:82         TIME_WAIT       0
  TCP    192.168.1.200:60706    tg-in-f100:https       SYN_SENT        1128
 [chrome.exe]
  TCP    192.168.1.200:60707    tg-in-f100:https       SYN_SENT        1128
 [chrome.exe]
  TCP    192.168.1.200:60748    183.136.237.25:843     TIME_WAIT       0
  TCP    192.168.1.200:60749    183.136.237.25:82      TIME_WAIT       0
  TCP    192.168.1.200:60758    183.136.237.25:82      TIME_WAIT       0
  TCP    192.168.1.200:60760    121:8180               FIN_WAIT_1      1128
 [chrome.exe]
  TCP    192.168.1.200:60761    183.136.237.25:82      TIME_WAIT       0
  TCP    192.168.1.200:60764    121:8180               ESTABLISHED     1128
 [chrome.exe]



按843端口的地址请求一份 crossDomain.xml 来,结果是这样的,好大方的两颗星:
<?xml version="1.0"?>
<cross-domain-policy>
    <allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>




浏览开始请求页面,服务输出 HTML 数据,通过解析 HTML 数据后,得到加载指令,进而执行一系列请求,而这里应该注意的是以下三个 SWF 文件,还有 videoID=93425,它们是视频数据的直接关联部分。

http://acjs.aliyun.com/flash/JSocket.swf

http://irs01.net/MTFlashStore.swf

http://s.yytcdn.com/swf/common/mvplayer.swf



如果人品够好直接找到这人JSON文件,就可以直接下载视频了,其实只要.flv之前这部分系统就会自动跳转到视频的CDN服务器:

http://hc.yinyuetai.com/uploads/videos/common/32A00127BA9B8DBB4FA3B950FEC648DF.flv?sc=c4ba59bdfb7b1eb5&br=688&vid=37962&aid=3585&area=JP&vst=0&ptp=mv&rd=yinyuetai.com&json=1


到这里,其实不用再去深挖 mvplayer.swf 里的东西了,基本确定它会将视频ID 37962 和 32A00127BA9B8DBB4FA3B950FEC648DF 这块编码联系起来,至于算法肯定不是 MD5 SHA 等等常见指纹摘要算法,需要通过分析 mvplayer.swf 理清。主要是因为,虽然网站使用了要 Socket 来做视频的数据传输,但仍然是基于 HTTP 协议的传输,逻辑上并没增加保密性代码,因此只是绕过了浏览的监视而以。


Wireshark 抓包与分析


再用 Wireshark 抓包看视频在什么服务器上,这里运行一个没有过滤器抓包任务,这种情况下会相对混乱,因为抓的包多,尽量还要运行其它不相关的程序或打开不相关的网站。注意页面加载视频的时候,Wireshark 会抓到相关的包,而且这些包通常会比较大。需要分拆发送,所以会有显眼的 [TCP segment of a reassembled PDU] 字样。挑一个出来,选择右键菜单的 Follow TCP Stream,出来一个对话框,人品好的话一下就中了:


GET /6/r/b/m/f/rbmftmwaxhcnxjnuqdqfipkuesverx/hc.yinyuetai.com/32A00127BA9B8DBB4FA3B950FEC648DF.flv?sc=c4ba59bdfb7b1eb5&br=688&vid=37962&aid=3585&area=JP&vst=0&ptp=mv&rd=yinyuetai.com HTTP/1.1
Accept: */*
Host: 222.243.215.138
Referer: yytcdn.com
Range: bytes=25067520-27569147
Connection: Keep-Alive


HTTP/1.1 206 Partial Content
Server: T1-CACHE/
Date: Mon, 10 Aug 2015 09:11:30 GMT
Content-Type: video/mp4
Content-Length: 2501628
Last-Modified: Tue, 15 Oct 2013 17:09:35 GMT
Connection: keep-alive
ETag: "525d76cf-1a4abfc"
Expires: Tue, 09 Aug 2016 09:11:30 GMT
Cache-Control: max-age=31536000
Content-Range: bytes 25067520-27569147/27569148



GET /10/x/h/c/h/xhchgxmdjndpeymboepyeqiallvljn/hc.yinyuetai.com/F466013AB6C9120E52E98349C292DE47.flv?sc=8e15b0cae1d004a0&br=777&vid=398619&aid=994&area=JP&vst=0&ptp=mv&rd=yinyuetai.com HTTP/1.1
Accept: */*
Host: 125.89.74.163
Referer: yytcdn.com
Range: bytes=0-1
Connection: Keep-Alive


HTTP/1.1 206 Partial Content
Server: T1-CACHE/
Date: Mon, 10 Aug 2015 09:40:03 GMT
Content-Type: video/mp4
Content-Length: 2
Last-Modified: Fri, 15 May 2015 22:08:32 GMT
Connection: keep-alive
ETag: "55566e60-27e19a3"
Expires: Tue, 09 Aug 2016 09:40:03 GMT
Cache-Control: max-age=31536000
Content-Range: bytes 0-1/41818531


上面两组内容是 HTTP 1.1 协议的头部内容,很显眼的有一个 FLV 文件路径摆在眼前,但是 FLV 服务器不同,显然这是网站为了加速访问做的 CDN - yytcdn.com。有趣的是在 FLV 文件结束处发现有标记: freeIsoMedia File Produced with GPAC 0.4.5 (build 33) ,GPAC 这是个开源的家伙。



结合前面的 crossDomain.xml,试试本地的 JScoket.swf,将前面的请求头一字不差复制,修改其中 Range 的最大值为 1000,发送请求到主机 125.89.74.163 ,可以看到1000字节就这样取下来了,所以 crossDomain.xml 管理不好,Flash Socket 就蛮好用的:

GET /10/x/h/c/h/xhchgxmdjndpeymboepyeqiallvljn/hc.yinyuetai.com/F466013AB6C9120E52E98349C292DE47.flv?sc=8e15b0cae1d004a0&br=777&vid=398619&aid=994&area=JP&vst=0&ptp=mv&rd=yinyuetai.com HTTP/1.1
Accept: */*
Host: 125.89.74.163
Referer: yytcdn.com
Range: bytes=0-1000
Connection: Keep-Alive


HTTP/1.1 206 Partial Content
Server: T1-CACHE/
Date: Mon, 10 Aug 2015 11:23:23 GMT
Content-Type: video/mp4
Content-Length: 1001
Last-Modified: Fri, 15 May 2015 22:08:32 GMT
Connection: keep-alive
ETag: "55566e60-27e19a3"
Expires: Tue, 09 Aug 2016 11:23:23 GMT
Cache-Control: max-age=31536000
Content-Range: bytes 0-1000/41818531



视频链接

爱してる-- 高铃:
http://222.243.215.138/6/r/b/m/f/rbmftmwaxhcnxjnuqdqfipkuesverx/hc.yinyuetai.com/32A00127BA9B8DBB4FA3B950FEC648DF.flv
真夏のSounds good !-- AKB48:
http://125.89.74.163/10/x/h/c/h/xhchgxmdjndpeymboepyeqiallvljn/hc.yinyuetai.com/F466013AB6C9120E52E98349C292DE47.flv



协议森林内的修炼


要深入观察 Socket 内的 TCP 包就要使用高级别的工具了,如 Wireshark 和 TcpDump,SmartSniff 等 TCP/IP 网络数据抓包工具。

一般情况下Linux都自带了tcpdump,可以到 http://www.tcpdump.org 下载源代码。 

Win 平台对应的是 WinPCAP/WinDUMP 组合,前者是一个平台,后者基于 WinPCAP 这个平台开发的。


这里使用 Wireshark ,打开程序界面后,开始一个抓包工作,在过滤器中填入 host 14.17.110.3 或者 port 82,然后点击 Start 按钮开始抓包。


OSI 网络通信模型中有几个术语,数据帧 Frame, 数据包 Packet, 数据报 Datagram,它们分别对应OSI模型的各个层。OSI 共分7层,由底层到高层分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层:物理层归属为物理底层,是网络硬连接层次上的内容,后面三层为底层协议主要有TCP/IP这类服务协议。


OSI 每一层都使用协议数据单元(Protocol Data Units,PDU),通过封装使每个PDU被附加到数据上,而且每个PDU都有特定的名称(物理层:比特流;链路层:数据帧;网络层:数据包;传输层:数据段;)其名称取决于在每个报头中所提供的信息。这种PDU信息只能呢个由接收方设备中的对等层读取,在读取之后,报头就被剥离,然后把数据交给上一层。

第二层,链路层的PDU叫做Frame,所能承受的最大传输单元称为MTU,在以太网中,MTU的长度为1500字节。

第三层,网络层的叫做数据包Packet;

第四层,传输层的数据单元也可称为数据包(packet)。但是,当你谈论TCP等具体的协议时又有特殊的叫法,TCP的数据单元称为段(segment)而UDP协议的数据单元称为数据报(datagram)。


OSI参考模型的各层传输的数据和控制信息具有多种格式,常用的信息格式包括帧、数据包、数据报、段、消息/报文、元素和数据单元。信息交换发生在对等OSI层之间,在源端机中每一层把控制信息附加到数据中,而目的机器的每一层则对接收到的信息进行分析,并从数据中移去控制信息,下面是各信息单元的说明:

帧(Frame)是一种信息单位,它的起始点和目的点都是数据链路层。

数据包(Packet)也是一种信息单位,它的起始和目的地是网络层。

数据报(Datagram)、段(Segment)通常是指起始点和目的地都是传输层的信息单元。

消息/报文(Message)是指起始点和目的地都在网络层以上(经常在应用层)的信息单元。

元素(Cell)是一种固定长度的信息,它的起始点和目的地都是数据链路层。元素通常用于异步传输模式(ATM)和交换多兆位数据服务(SMDS)网络等交换环境。

数据单元(Data Unit)指许多信息单元。常用的数据单元有服务数据单元(SDU)、协议数据单元(PDU)。SDU是在同一机器上的两层之间传送信息。PDU是发送机器上每层的信息发送到接收机器上的相应层(同等层间交流用的)。


这里说的 IP 包是指 IPv4 版本,参考 RFC791,典型 IP 包头为 20Bytes,下面按顺序说明:

0x00:
4bits   IP协议版本号,主要是 0x4 表示 IPv4。
4bits   IP包头长度 IHL Internet Header Length,
        双字数,即32位数据的数量,所以包头最长可以达60字节,以每4个字节进行扩展。
0x01:
1Byte   服务类型 TOS Type of Service
        bbb..... 优先级字段占3位。设置了数据包的重要性,取值越大数据越重要。
                 000 普通 (Routine)
                 001 优先的 (Priority)
                 010 立即的发送 (Immediate)
                 011 闪电式的 (Flash)
                 100 比闪电还闪电式的 (Flash Override)
                 101 CRI/TIC/ECP
                 110 网间控制 (Internetwork Control)
                 111 网络控制 (Network Control)
        ...b.... Delay 延迟字段占1位,取值:0(正常)、1(期特低的延迟) 
        ....b... Throughput 流量字段占1位。取值:0(正常)、1(期特高的流量) 
        .....b.. Reliability 可靠性字段占1位。取值:0(正常)、1(期特高的可靠性)
        ... ..b. ECN-Capable Transport 显式拥塞指示 Explicit Cogestion Notification 传输字段占1位。
                 由源端设置,取值:0(不支持ECN)、1(支持ECN)
        .......b Congestion Experienced 拥塞预警字段占1位。取值:0(正常,不拥塞)、1(拥塞)
0x02:
2Bytes  IP包总长度 TL Total Length,以字节为单位。
        所以IP数据报最长可达65KB,尽管如此,大多数的链路层都会对它进行分段。
        UDP的应用(如RIP、TFTP、BOOTP、DNS、SNMP等),都限制用户数据报长度为512字节,
        现代硬件大多允许超过8192字节的IP数据报。
0x04:
2Bytes  认证,即 ID 识别码 Identification 数据段送达目标后进行复原时,这个ID就是依据。


0x06:
3bits   标志位:保留一位,
        不分段标志一位(1表示不分段),
        MF, More fragments 更多分段标志一位(0表示最后一个数据包,1表示后面还有数据段)。
13bits  段偏移 Fragment Offset,FO,结合标志位确定此数据段在复原时如何排位。


0x08:
1Byte   TTL Time to live 存活时间,每通过一个路由器该值减一,为0时将被路由器丢弃。
1Byte   协议 Protocol,如常见的 0x06 TCP,0x11 UDP。
        00     IP          06      TCP       27     RDP         73      RSPF   
        01     ICMP        08      EGP       29     ISO-TP4     81      VMTP     
        02     IGMP        12      PUP       36     XTP         89      OSPFIGP  
        03     GGP         17      UDP       37     DDP         94      IPIP     
        04     IP-ENCAP    20      HMP       39     IDPR-CMTP   98      ENCAP    
        05     ST          22      XNS-IDP
0x0A:
2Byte   包头校验和 Checksum


4Byte   来源IP地址 Source Address
4Byte   目标IP地址 Destination Address
.....   可以选项,按4个字节进行扩展
DATA    余下的全为数据,即数据包




下面简要介绍以太网数据帧格式,由数字设备公司,英特尔,施乐 DIX (Digital Equipment Corporation, Intel, Xerox 三家制订的 DIX 以及 IEEE 制订的后两种规范:

DIX:

Preamble 8 Destination 6 Source 6 Type 2 Data and Pad 46~1500 FCS 4 


IEEE802.3(Original):

Preamble 7 SFD 1 Destination 6 Source 6 Length 2 Data and Pad 46~1500 FCS 4 


IEEE802.3(Revised 1997):

Preamble 7 SFD 1 Destination 6 Source 6 Length/ Type 2 Data and Pad 46~1500 FCS 4


前导码(Preamble)占用7字节用于同步,每个byte都是0xAA,也就是二进制的10101010,也就电路中产生的方波信息,目的是为了让接收设备调整接收频率,以便与发送设备的频率一致,这个过程就叫做时钟复原(recover the clock)。时钟调整好之后,我们等待帧的起始信号(SFD Start Frame Delimiter),它是固定的值0xAB。紧随SFD之后的是6 byte的目的地(DST, destination)和6 byte的发出地(SRC, source)的MAC地址。MAC地址是物理设备自带的序号,只能在同一个以太网中被识别。

头部的最后一个区域是Type,用以说明数据部分的类型。(比如0x0800为IPv4,0x0806为ARP),不同的值可以用来区别这两种帧的类,字段值小于等于1500(0x05DC),帧使用的是IEEE 802.3格式。当Type字段值大于等于1536 (0x0600),帧使用的是Ethernet II格式,所以 IPv4 使用的就是它。

最后的帧校验序列(FCS Frame Check Sequence)4个字节用于确保数据准确,如果帧长小于64字节,即数据不多的情况下,则要求填充,以使这个帧的长度达到64字节,最大帧长1518B,其中数据可以占 46-1500B。

FCS采用了CRC(Cyclic Redundancy Check)算法,n位CRC算法取一个n bit的因子,数据序列结尾增加n-1个0。因子与数据序列进行XOR运算,最终得到n-1位结果值,取反后存储在FCS的位置。



TCP 和 UDP 两种协义在编程时会经常接触的到,它们都基于 IP 协议之上。而端口 PORT 这个术语就是它们用来区分不同应用时产生的,这里的端口并还是说一个硬件一样的插口,而是一种虚拟约定,需要用来确定数据包的使用者。比如说 FTP 应用端口是 21,HTTP 80端口,HTTPS 443端口等等。如果 IP 包指定的协议是 TCP 协义,那么解开 IP 包后得到的数据就是一个 TCP 包,依此类推。TCP 包又有包头和数据两部分组成,结构如下:

2Bytes  来源端口,源主机应用指定的端口号,所以端口只能取值 0 到 65535。
2Bytes  目标端口,目标主机应用指定的端口。
4Bytes  序列码 Sequence number,数据发送时,多个数据包可能按随机的先后顺序送达,再还原数据时就依据这个序列来重组。
4Bytes  确认码 Acknowledge number,值为序列号加一。
4Bits   包头长度,双字数,因此 TCP 包头最长60个字节。
12Bits  标志位,指定 TCP 连接状态。
        000. .... ....  保留位
        .... 1... ....  Nonce
        .... .1.. ....  CWR(congestion window reduced)
        .... ..1. ....  URG(urgent)
        .... ...1 ....  ACK(acknowledgement) 
        .... .... 1...  PSH(push) 
        .... .... .1..  RST(reset)
        .... .... ..1.  SYN(synchronous) 
        .... .... ...1  FIN(finish)


2Bytes  移动窗口大小,表示接收端期望通过单次确认而收到的数据大小,通常用它了控制网络流量。
2Bytes  校验和,校验整个TCP报文,由发送端计算和记录,接收端进行验证。

UDP 报文也和 TCP 类似,但结构更简单,它不提供可靠连接,但在实时通信领域应用效果更好,包的结构:

2Bytes  来源端口,源主机应用指定的端口号,所以端口只能取值 0 到 65535。
2Bytes  目标端口,目标主机应用指定的端口。
2Bytes  UDP包头长度,字节数。
2Bytes  校验和,同 TCP 的校验和字段功能,该处可选,因为 UDP 不提供可靠的连接。

TCP 作为一种可靠全双工传输层协议,它的连接通过三次握手的过程建立:

1. A主机,又称客户端发送一个标记了 SYN=1 的数据段,表明期望与B主机连接,此数据的序列号设为 一个随机数 a。

2. B主机,又称服务器回复标识了 SYN=1、ACK=1 的数据段,此数据的序列号为随机数 b,确认序列号为 a+1 。

3. A主机发送一个标识 ACK 的数据段,此数据段序列号为 a+1,确认序列号为 b+1。


这样就建立两台主机的 TCP 可靠连接,它的可靠性还不止于此,更重要的是 TCP 的确认报文,当目标主机收到报文后会向源主机发送确认报文,源主机收到确认报文后继续发送数据段。当数据传输完成后,TCP 还要经过四次握手过程才能正式断开连接:

1. A主机想终止连接,发送一个标识了 FIN、ACK 的数据段,序列号为 a,确认序列号为 b。

2. B主机回应一个标识了 ACK 的数据段,序列号为 b ,确认序列号为 a+1。

3. B主机向A主机发送一个标识了 FIN、ACK 的数据段,序列号为 b,确认序列号为 a+1。

4. A主机回应一个标识了 ACK 的数据段,序列号为 a+1 ,确认序列号为 b+1。

这样通过四次交互才算完事。


进入到更高级的协议,如 HTTP 就不需要这样按二进制来解析数据报内容了,可以直接分析字符串来进行程序间的会话。然而这种从二进制到字符串的模式转换并没有简化逻辑关系,反而带来更多的逻辑关系,这取决于协议服务的定义。


例如分析 Wireshark 抓到两个包,严格来讲是数据帧,所以开始的6字节为源地址MAC:

===========================================================================
0000   c8 e7 d8 c9 cd 2d 5c 63 bf a5 20 e8 08 00 45 00  .....-\c.. ...E.
0010   00 30 24 b0 00 00 37 06 55 a9 da 1e 6c e0 c0 a8  .0$...7.U...l...
0020   01 c8 00 50 da 38 9a f7 e3 95 7b aa 4a 89 70 12  ...P.8....{.J.p.
0030   39 08 21 62 00 00 02 04 05 a0 01 01 04 02        9.!b..........
===========================================================================
0000   c8 e7 d8 c9 cd 2d 5c 63 bf a5 20 e8 08 00 45 00  .....-\c.. ...E.
0010   00 28 24 b1 00 00 37 06 55 b0 da 1e 6c e0 c0 a8  .($...7.U...l...
0020   01 c8 00 50 da 38 9a f7 e3 96 7b aa 50 29 50 10  ...P.8....{.P)P.
0030   43 80 3d fa 00 00                                C.=...
===========================================================================

两个包都有相同的目标地址:c8-e7-d8-c9-cd-2d     来源地址:5c-63-bf-a5-20-e8

两者对应本地无线网卡和无线路由地址,结合 Type 字段 0x0800 说明是一个外网返回的IPv4包。


先看第二个包,从 0x0E 到 0x32 共34字节就是一个 IP 包。0x45 表示 IPv4 及包头长 5*4=20 字节,所以数据部分只有14个字节,直接看协义字节 0x09 处值为 0x06 表明是一个 TCP连接。0x06标志位全0,表示是一个独立 IP 包。再看到源地址处 0x0C 四个字节 da 1e 6c e0 ,转换后便是 da=218 1e=30 6c=108 e0=224,即源IP为 218.30.108.224,同样得到目标地址 c0 a8 01 c8 为 192.168.1.200。到这里就只余下16个字节的 TCP 包了,按 TCP 包的结构可以得到源端口是 0x0050,这里的数值算是大尾方式处理的,端口号为 80 即标准的 HTTP 服务端口。目标端口 0xda38=55864 是应用程序随机产生的通信端口。其标志位指明是一个 0x010 (ACK) ,可能是建立连接的第三步,或都断开连接的第二、四步,需要根据相关的 TCP 包来确认。两个包的序列码只有最小字节分别是 0x95 0x96 相差 1 ,确认码差值较大 0x5029-0x4a89=0x10a0=1440,所以不符合相关条伯,不是相关的包。第一个包的标识位是 0x012 (ACK, SYN),这一点可以确定是建立连接的第二步。


网络与路由


通常wireshark中不可以直接抓取本地的回环数据包,比如写一个小socket程序,client和server都在本地,这种数据包wireshark是不能直接抓取的。但可以通过以下配置达到此目的:

windows下,在命令行中输入以下语句:

route add 192.168.1.200 mask 255.255.255.255 192.168.1.2 metric 1
route delete 192.168.1.200
route print

命令使用格式:

route add <dest_IP> mask 255.255.255.255 <the_gateway> metric 1 

route add [目标IP] [mask <网络掩码>] [网关IP] [metric <跳跃数度量值>] [if <接口>]


其中,192.168.1.200 是本机 IP, 192.168.1.2是路由网关,目的是让本地回环数据包到网关上走一圈,这样会重复接收到每个包,用完再用第二条删除就好,不然网络负担加倍会好难受,第三条命令用来显示当前的路由表。


下面分别断开网络连接和连接网络的路由表,断开时,本地环回 127.0.0.1 和物理的网卡没有任何关系,打印出来的路由表也比较容易看得明白。通俗点说,接口指硬件网卡上的网线口,网关是指数据从接口发送到其它网络时先走哪里,掩码是指值为 255 对应的 IP 地址位作为网段,其余的作为主机段。网关“在链路上”指网络链路中存在多个网关,VISTA以上的系统支持配置多个网关的多重网络。

IPv4 路由表
===========================================================================
活动路由:
网络目标        网络掩码          网关       接口   跃点数
        127.0.0.0        255.0.0.0            在链路上         127.0.0.1    306
        127.0.0.1  255.255.255.255            在链路上         127.0.0.1    306
  127.255.255.255  255.255.255.255            在链路上         127.0.0.1    306
        224.0.0.0        240.0.0.0            在链路上         127.0.0.1    306
  255.255.255.255  255.255.255.255            在链路上         127.0.0.1    306
===========================================================================


IPv4 路由表
===========================================================================
活动路由:
网络目标        网络掩码          网关       接口   跃点数
          0.0.0.0          0.0.0.0      192.168.1.2    192.168.1.200     30
        127.0.0.0        255.0.0.0            在链路上         127.0.0.1    306
        127.0.0.1  255.255.255.255            在链路上         127.0.0.1    306
  127.255.255.255  255.255.255.255            在链路上         127.0.0.1    306
      192.168.1.0    255.255.255.0            在链路上     192.168.1.200    286
    192.168.1.200  255.255.255.255            在链路上     192.168.1.200    286
    192.168.1.255  255.255.255.255            在链路上     192.168.1.200    286
        224.0.0.0        240.0.0.0            在链路上         127.0.0.1    306
        224.0.0.0        240.0.0.0            在链路上     192.168.1.200    286
  255.255.255.255  255.255.255.255            在链路上         127.0.0.1    306
  255.255.255.255  255.255.255.255            在链路上     192.168.1.200    286
===========================================================================


使用 Cain 这个工具可以得到显示某一网关的路由表,看起来是这样的:
===========================================================================
         网络目标        网络掩码            网关             接口   跃点数
          0.0.0.0          0.0.0.0    192.168.1.2     192.168.1.200     30
        127.0.0.0        255.0.0.0      127.0.0.1         127.0.0.1    306
        127.0.0.1  255.255.255.255      127.0.0.1         127.0.0.1    306
  127.255.255.255  255.255.255.255      127.0.0.1         127.0.0.1    306
      192.168.1.0    255.255.255.0  192.168.1.200     192.168.1.200    286
    192.168.1.200  255.255.255.255  192.168.1.200     192.168.1.200    286
    192.168.1.255  255.255.255.255  192.168.1.200     192.168.1.200    286
        224.0.0.0        240.0.0.0      127.0.0.1         127.0.0.1    306
        224.0.0.0        240.0.0.0  192.168.1.200     192.168.1.200    286
  255.255.255.255  255.255.255.255      127.0.0.1         127.0.0.1    306
  255.255.255.255  255.255.255.255  192.168.1.200     192.168.1.200    286
===========================================================================


这几个表都以目标IP打头,因此从实际作用的角度看这些表比较容易理解,如果要从网络通信发起的角度看,可以将接口这一列放到前面来,这样可以理解本地环回接口和主机IP的差别,也就是第一条,这条可以称为实实在在的出口路由。


如果访问地址并非本地,则系统会将目标地址当作0.0.0.0 掩码是0.0.0.0,也就是处本地、127地址之外的所有地址均通过192.168.1.2这个网关出去,这条路由通常被称为默认路由,上外网就依靠此条路由策略。就是因为有了这条路由,才可以将访问外网的请求都发给网关192.168.1.2,之后就由网关主机上的ISA2006去处理这些请求了。

再来看第二、三条记录,注意掩码分别指明是8位网段和32位网段。127.X.X.X 这个特殊的地址,约定为本地回路,因此所有本地包只会在各 127.X.X.X 网段上传播,所以 Wireshark 抓不到这种包的。因此下面的 ping 指令可以得到主机回应,因为最终都会回到同一个网关:

ping 127.0.0.1
ping 127.0.0.100
ping 127.1.1.100

注意第三条掩码部分,全置位,IP 中四个值共 32bits 都表示网段,就是说没有位置指明主机了!这种情况下,每个网段就只能存在一台默认的主机,也就是单机地址,一般作为网络的设备的环回接口,127.0.0.1 这个就是主机的环回接口,ADSL 网络中这种情况也很常见。


接下来的是主机 IP 地址 192.168.1.200 ,为了理解和这个 IP 相关的路由,先来执行 ping 命令:

===========================================================================
C:\>ping 192.168.1.0


正在 Ping 192.168.1.0 具有 32 字节的数据:
来自 192.168.1.200 的回复: 无法访问目标主机。
来自 192.168.1.200 的回复: 无法访问目标主机。
来自 192.168.1.200 的回复: 无法访问目标主机。
来自 192.168.1.200 的回复: 无法访问目标主机。


192.168.1.0 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),


C:\>ping 192.168.1.255


正在 Ping 192.168.1.20 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。


192.168.1.20 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
===========================================================================


执行结果表明,ping 通了,但没有收到主机回复。这是因为上面两条 ping 命令的 IP 和主机是第五条路由指明的同一网段,但是不存在这样的主机,IP 没有对应的主机。两都有差别的地方是后者使用的广播 IP 地址,前者是网段地址,因此后者得不到主机的回应。


使用 route add 命令添加的一条路由是指定网关的:

    route add 192.168.1.200 mask 255.255.255.255 192.168.1.2 metric 1


再 ping 主机 IP 时,竟会出现请求超时!这点实在没搞清楚,求教,PLEASE!


第五条,可以理解为,如果某个地址和掩码 255.255.255.0 进行与运算后结果都是 192.168.1.0,表示同网段,则本机地址可以与之通讯,这条路由的作用其实是代替了这个计算过程。可以 ping 通同网段的的任意一个有效 IP,就是因为这条路由在起作用。


224开头的是多播地址,这个是在某些情况下给多地址发广播时用的,因此这里会单独作为一条路由策略列出。


最后两条,255.255.255.255 的地址是广播地址的一种,被称为有限广播,同时也叫本地广播。


参考资料

《络基础知识培训-刘宏忠》

http://wenku.baidu.com/view/10f5651f14791711cc7917f5.html

《小喇叭开始广播 (以太网与WiFi协议)》 - Vamei

http://www.cnblogs.com/vamei/archive/2012/11/27/2790065.html

《HCNA-HNTD 入门培训教材 以太网帧结构》

http://blog.csdn.net/wdkirchhoff/article/details/43915825

《重读route print路由表的一些心得》

http://itbbs.pconline.com.cn/network/10516396.html

《配置网络上的多个网关》 

http://windows.microsoft.com/zh-cn/windows/configuring-multiple-network-gateways







版权声明:本文为博主原创文章,未经博主允许不得转载。

Socket与网站保密应用 (隐藏链接的视频下载)

标签:actionscript   javascript   tcp   

原文地址:http://blog.csdn.net/winsenjiansbomber/article/details/47403929

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!