如果精確判斷一個(gè)IP是否被占用
我們?cè)诰钟蚓W(wǎng)經(jīng)常需要去測(cè)試一個(gè)IP是否在用,通過使用ping命令去測(cè)試網(wǎng)絡(luò)通還是不通,但這種方法不是很精確。
我在cnaaa.com上購買了云服務(wù)器。
原因是 ping 命令使用的是 ICMP 協(xié)議(Internet Control Message Protocol),ICMP協(xié)議是 TCP/IP 協(xié)議族中的一員,它也含IP頭,所以我們可以使用 IP 去 ping。ICMP協(xié)議是用來偵測(cè)網(wǎng)絡(luò)錯(cuò)誤的,ping 命令用到了 ICMP 中的 ICMP ECHO REQUEST 和 ICMP ECHO REPLY,用來判斷 IP 地址是否通。之所以說這種方法判斷 IP 是否被占用不太可靠,是因?yàn)榕cTCP和UDP協(xié)議一樣,在防火墻上是可以禁用此類網(wǎng)絡(luò)包的。也就是對(duì)方可以禁ping,讓你無法 ping 通對(duì)方。
之所以會(huì)出現(xiàn)禁ping策略,是因?yàn)楹芏嗑W(wǎng)絡(luò)攻擊是先通過ICMP協(xié)議判斷主機(jī)是否存活,如果 ping 不通有可能會(huì)躲避一部分網(wǎng)絡(luò)攻擊。但 ping 不通只說明 ICMP 協(xié)議被禁,TCP 或 UDP 協(xié)議也可以用來判斷主機(jī)是否存活,所以禁 ping 只能躲避一些簡單攻擊,如果對(duì)方對(duì)端口進(jìn)行掃描,服務(wù)器如果存在開放的端口的話,還是會(huì)被對(duì)方發(fā)現(xiàn)。
我們假定主機(jī)就是一臺(tái)普通PC,沒有對(duì)外開放服務(wù)端口,并且在防火墻上禁了ICMP協(xié)議,此時(shí)還有沒有辦法判斷此PC的IP是否處于活躍狀態(tài)?
ping 命令可以跨網(wǎng)段,此時(shí)使用的是三層網(wǎng)絡(luò),中間會(huì)用到IP和路由。如果在二層網(wǎng)絡(luò)下,設(shè)備間是通過 MAC 地址而非IP來進(jìn)行通訊的。二層網(wǎng)絡(luò)會(huì)被局限在一個(gè)VLAN或網(wǎng)段里,也就是說跨網(wǎng)段通信需要三層路由,但在同網(wǎng)段內(nèi),設(shè)備彼此是可以通過ARP廣播來判斷 MAC 地址是否存在,如果存在即可存在交換機(jī)或終端的ARP表中方便直接進(jìn)行通訊。
我們看一下 Windows 下PC的ARP表
arp -a
Linux 下命令類似
在 PC 或服務(wù)器的 ARP 列表中,只會(huì)存與網(wǎng)卡相連的同網(wǎng)段網(wǎng)絡(luò) MAC,而不會(huì)存跨網(wǎng)絡(luò)網(wǎng)絡(luò)的MAC。因?yàn)锳RP是“Address Resolution Protocol”(地址解析協(xié)議)的縮寫。在同網(wǎng)段中,通過地址解析協(xié)議,源主機(jī)可以通過目的主機(jī)的IP地址獲得目的主機(jī)的MAC地址。也就是說,IP是三層網(wǎng)絡(luò)的地址,MAC是二層網(wǎng)絡(luò)的地址。防火墻工作在三層網(wǎng)絡(luò),所以在二層網(wǎng)絡(luò),MAC 和 IP 是可以直接被定位到的。
PC 只存同網(wǎng)絡(luò)的 MAC 地址,跨網(wǎng)絡(luò)如何查??缇W(wǎng)絡(luò)的MAC可以在交換機(jī)的ARP地址表中查,如果網(wǎng)關(guān)在核心交換機(jī)上,那么所有需要通信的主機(jī)的IP和MAC的相對(duì)應(yīng)的關(guān)系都在交換機(jī)上可以找到。所以說一個(gè)IP有沒有占用,交換機(jī)肯定是知道的。
我們?cè)诮粨Q機(jī)ruijie-8610設(shè)備上查看VLAN 25的MAC與IP的映射關(guān)系
root@ns-xxzx-svr:~# telnet 192.168.25.254Trying 192.168.25.254...Connected to 192.168.25.254.Escape character is '^]'.
User Access Verification
Password:
ZXYYNQ-CORE-RG8610>enable
Password:ZXYYNQ-CORE-RG8610# show arp VLAN 25
交換機(jī)的 arp 列表存在緩存,當(dāng)設(shè)備上線或離線時(shí),無法找到設(shè)備時(shí)會(huì)觸發(fā)ARP廣播,從而刷新ARP緩存。在Windows或Linux下可以使用arp -d命令清空arp表,重新通過arpi學(xué)習(xí)更新arp表。在ping一個(gè)地址時(shí),如果arp表為空,此時(shí)就會(huì)觸發(fā)一個(gè)arp請(qǐng)求。有沒有手動(dòng)進(jìn)行arp請(qǐng)求的方法?有,這個(gè)命令叫 arping ,與 ping 不同,ping 使用的是 ICMP 協(xié)議,而 arping 使用 arp 請(qǐng)求來代替 ICMP。
arping 只能 ping 同網(wǎng)段的IP,不能跨網(wǎng)絡(luò)發(fā)起 arp 請(qǐng)求,這是二層網(wǎng)絡(luò)通信決定的。如果存在多個(gè)網(wǎng)卡,此時(shí)需要指定網(wǎng)卡接口,不然 arping 不知道從哪個(gè)網(wǎng)卡接口出去。
arping -I eth0 192.168.10.1
Windows 下有沒有類似的工具?有,但是第三方的,下載地址:
- https://elifulkerson.com/projects/arp-ping.php
使用方法與 Linux 下一致
文章來源:http://www.zghlxwxcb.cn/news/detail-480482.html
總結(jié),通過 arping 可以精確判斷一個(gè)設(shè)備的IP是否是在線狀態(tài),此時(shí)防火墻是無法阻止對(duì)方通過 arping 來 ping 你,如果在 MAC 地址層面不通,說明此網(wǎng)絡(luò)接口網(wǎng)絡(luò)不通。文章來源地址http://www.zghlxwxcb.cn/news/detail-480482.html
到了這里,關(guān)于如果精確判斷一個(gè)IP是否被占用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!