写在前面
今天在访问一个网站的时候,我想看看它的ip是多少,就在windows里的cmd命令行中去ping了下该网站,ip地址是解析出来了,但是却发现请求超时,没有ping通,当时我就很困惑。然后我又tracert该 ip,跟踪了一下想看看到底什么问题,最后我发现,当跟踪到该ip的时候 请求被拒绝了,因为tracert本质上也是发送icmp包来跟踪的。那么这里应该是服务端设置了相关策略,有的目标有防火墙设置,过滤了ping发出的ICMP数据包,导致无反馈,time out;还有直接禁用ping功能的,本质上就是对网络层icmp的回显请求报文进行了限制;而访问网页用的是http协议,因此会出现此现象 。
这里以北京大学的官网为例。
访问网页可以打开
可是在cmd里ping却ping不通
tracert也不行
ping的实质
发送一个icmp回显请求报文给目的的主机,并等待回显的icmp应答。然后打印出回显报文。
回显的结果包括:字节数 、 反应时间、TTL(生存时间)
tracert的实质
利用ICMP数据报和IP数据报头部中的TTL值。TTL(Time To Live)是一个IP数据报的生存时间,当每个IP数据报经过路由器的时候都回把TTL值减去1或者减去在路由器中停留的时间,但是大多数数据报在路由器中停留的时间都小于1秒种,因此实际上就是在TTL值减去了1。这样,TTL值就相当于一个路由器的计数器。
当路由器接收到一个TTL为0或者1的IP数据报的时候,路由器就不再转发这个数据了,而直接丢弃,并且发送一个ICMP“超时”信息给源主机。Tracert程序的关键就是这个回显的ICMP报文的IP报头的信源地址就是这个路由器的IP地址。同时,如果到达了目的主机,我们并不能知道,于是,Tracert还同时发送一个UDP信息给目的主机,并且选择一个很大的值作为UDP的端口,使主机的任何一个应用程序都不使用这个端口。所以,当达到目的主机的时候,UDP模块就产生一个“端口不可到达”的错误,这样就能判断是否是到达目的地了。
telnet命令
大家通常都知道telnet可以远程连接主机,服务器等。这里我介绍一个telnet测试网站是否有开放http服务的方法。
这个方法其实和直接访问网站查看是否有开放http服务差不多
访问网页可以打开
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-01zsMdEP-1615967511479)(https://image.3001.net/images/20210317/1615965924_6051aee4c100b85d048be.png!small)]
打开cmd
这里还是以北京大学的官网为例
和
然后会进入一片黑,这里就说明该网站是有开放http和https服务的
然后会跳出这个界面
这里在fofa上找到个网站
直接访问无法访问
用telnet也不行