对于Linux下ifconfig命令的随笔
我们知道,linux下有很多命令,大体上可以分为如下几类:
- 文件管理
- 文档编辑
- 文件传输
- 磁盘管理
- 磁盘维护
- 网络通讯
- 系统管理
- 系统设置
- 备份压缩
- 设备管理
我们现在具体分析一下网络通讯里头的一个命令:ping。
1.ping命令有什么作用
Ping是潜水艇人员的专用术语,表示回应的声纳脉冲,在网络中Ping是一个十分好用的TCP/IP工具。它主要的功能是用来检测网络的连通情况和分析网络速度。
2.ping命令背后的ICMP协议
Linux ping命令用于检测主机。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。所以,在进一步说明ping命令之前,我们不妨先了解下ICMP协议。
2.1为什么会有ICMP协议?
在IP通信中,经常有数据包到达不了对方的情况。原因是,在通信途中的某处的一个路由器由于不能处理所有的数据包,就将数据包一个一个丢弃了。或者,虽然到达了对方,但是由于搞错了端口号,服务器软件可能不能接受它。这时,在错误发生的现场,为了联络而飞过来的信鸽就是ICMP 报文。在IP 网络上,由于数据包被丢弃等原因,为了控制将必要的信息传递给发信方。ICMP 协议是为了辅助IP 协议,交换各种各样的控制信息而被制造出来的。可以说,它分担了IP协议的一部分功能。
2.2ICMP协议有何功能?
1. 确认IP包是否成功到达目标地址 ,如果没有告知原因。
2.向对方计算机询问一些问题,比如调查自己网络的子网掩码,取得对方机器的时间信息等——这其实就是后面要说到的ping命令。
2.3ICMP协议报文的结构:
根据报文结构,我们来说说两种报文,先说说差错报文。
举一个例子,最近我们正好过双十一,现在我们好比是给另外一个城市送快递。现在快递服务顾客不满意,顾客就用ICMP来反映投诉。常见情况如下:
1.终点不可达:比如我们主机的运输层写了个错误的端口号,结果ip包送过去,到了对方的主机上,对方没有对应的端口接受,被退回来了。就相当于发快递的地址,可能是门牌号,可能是小区号,可能干脆省份都写错了,查无此人,只能被退回来,那么ICMP就会汇报为什么送不到,用字段表示:网络不可达代码为 0,主机不可达代码为 1,协议不可达代码为 2,端口不可达代码为 3,需要进行分片但设置了不分片位代码为4,等等。
2.源点抑制:这个就是说,快递送的太多了,拆快递都来不及了,叫我们这里送慢点,别一次性送这么多过来。
3.时间超时:快递在路上耽搁太久,时间超时了,快递员直接偷了快递跑路了。也就是ip包超过时间(TTL)还没到达,为了不让它继续在网络中游荡堵塞网络,所以它就自行销毁了。
4.路由重定向:是发给另外一个路由器的。也就是相当于,上次快递交给一个中转站,那个中转站的人莫名其妙去绕了远路(路由算法有问题),导致东西送到顾客手上很晚了,顾客投诉了,这次特地来告诉那个中转站的负责人,下次要找一条好走的路(重新更新路由表)。
说完了差错报文,现在来说说另外一个,也就是请求与响应报文。这就进入了我们今天的主题——ping命令。
3.ping命令的原理
ping 命令用来在IP 层次上调查与指定机器是否连通,调查数据包往复需要多少时间。为了实现这个功能,ping 命令使用了两个ICMP 报文。我们主机的ping发送一个ICMP,对方主机收到之后,也用ICMP发送一个报文,这样就能检测网络是否畅通、或者连接发送的速度怎么样。就像我往山那头的人家喊一句,看什么时候有回声。如果始终没回声,那就是不在家。如果过了一会儿有回声,那么我们就可以根据回声的快慢来推断我们两人之间距离有多少。
1.我们主机先发送一个改造过的、为ping量身打造的ICMP报文——增加了标识符和序号字段。这两个新增加的字段,是用来标识各个不同的ICMP包。标识符是表示某一批送出的ICMP报文,同一批送出的都是一样的标识符。序号字段则是表示这是送出的第几个包,每送出一个就增加1。
2.对方主机收到之后,就做了一点小小的工作:把源地址和目标地址交换了一下,然后再把类型字段改成0,表示这个是回送的,然后就原封不动地送回来了。这就好像是我送了个快递到别人家,别人把地址交换了下,改成我是收件人,就直接叫送快递的原封不动地退回来了。那么我收到了之后,一看标识符,就知道哦,这是我刚才给张三送的快递(因为我同时还给其他人也寄了快递,标识符就是用来区分的,相当于收件人姓名),说明张三这会儿在家。好了,这会儿我看看邮戳,再看看墙上的钟,就知道这个快递送了一个来回要多久了,也就可以估计我和张三家距离多远了。
不过,ping命令也不是万能的,有时候也会失效:
1)目标服务器不存在;
2) 花在数据包交流上的时间太长ping 命令认为超时;
3)目标服务器不回答ping 命令。
4.用ping命令来干坏事
正所谓每个硬币都有两面,ping命令也能做些坏事,比如ping洪水:
它利用ping 的原理,向目标服务器发送大量的ICMP 回送请求。这是黑客向特定的机器连续发送大量的ICMP 回送请求报文。目标机器回答到达的ICMP 回送请求已经用尽全力了,原来的通信处理就变得很不稳定了。进一步,目标机器连接的网络也可能由于大量的ICMP 数据包而陷入不可使用的状态。
如果你觉得这招数还不厉害,还有更厉害的一招叫做smurf:
黑客恶意的使用ICMP 回送请求报文。这一点同ping 洪水是相同的。不过在smurf,对ICMP 回送请求实施了一些加工。源IP 地址被伪装成攻击对象服务器的地址,目标地址也不是攻击对象服务器的地址,而是成为中转台的网络的广播地址。
黑客发送伪装了的ICMP 回送请求后,到达在作为踏板的网络的入口处的路由器。这样,路由器将回送请求转发给网内所有的计算机。假如有100 台计算机,回送请求将到达100 台所有的计算机。收到回送请求的计算机对此作出反应,送出回送回答报文。这样,黑客送出的一个ICMP回送请求报文,一下子增加到了100 倍。黑客利用这个路由器作为跳板,让它去联系了自己辖区内的所有计算机,都成为了黑客的帮凶,一起向目标发起攻击。还记得之前我们讲过吗,对方主机收到之后要交换地址,那么也就是把现在的目标地址改成了黑客之前填的源地址,然后一起给他发送报文。
看到这个我就想起来以前电话不发达时候,大家还在用信件通信的时代,有一种免费寄信的办法,那就是故意把寄件人写成收件人,收件人写个空地址,然后邮局一看没贴邮票,就把信件退给了寄件人(其实是收件人),这个原理和刚才的smurf有点像,也是故意在目标地址和源地址上面做文章,可怜的邮局(路由器辖下的计算机们)就白白做了助纣为虐者。