如果精确判断一个IP是否被占用

这篇具有很好参考价值的文章主要介绍了如果精确判断一个IP是否被占用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如果精确判断一个IP是否被占用

我们在局域网经常需要去测试一个IP是否在用,通过使用ping命令去测试网络通还是不通,但这种方法不是很精确。

我在cnaaa.com上购买了云服务器。

原因是 ping 命令使用的是 ICMP 协议(Internet Control Message Protocol),ICMP协议是 TCP/IP 协议族中的一员,它也含IP头,所以我们可以使用 IP 去 ping。ICMP协议是用来侦测网络错误的,ping 命令用到了 ICMP 中的 ICMP ECHO REQUEST 和 ICMP ECHO REPLY,用来判断 IP 地址是否通。之所以说这种方法判断 IP 是否被占用不太可靠,是因为与TCP和UDP协议一样,在防火墙上是可以禁用此类网络包的。也就是对方可以禁ping,让你无法 ping 通对方。

之所以会出现禁ping策略,是因为很多网络攻击是先通过ICMP协议判断主机是否存活,如果 ping 不通有可能会躲避一部分网络攻击。但 ping 不通只说明 ICMP 协议被禁,TCP 或 UDP 协议也可以用来判断主机是否存活,所以禁 ping 只能躲避一些简单攻击,如果对方对端口进行扫描,服务器如果存在开放的端口的话,还是会被对方发现。

我们假定主机就是一台普通PC,没有对外开放服务端口,并且在防火墙上禁了ICMP协议,此时还有没有办法判断此PC的IP是否处于活跃状态?

ping 命令可以跨网段,此时使用的是三层网络,中间会用到IP和路由。如果在二层网络下,设备间是通过 MAC 地址而非IP来进行通讯的。二层网络会被局限在一个VLAN或网段里,也就是说跨网段通信需要三层路由,但在同网段内,设备彼此是可以通过ARP广播来判断 MAC 地址是否存在,如果存在即可存在交换机或终端的ARP表中方便直接进行通讯。

我们看一下 Windows 下PC的ARP表

arp -a

如果精确判断一个IP是否被占用

Linux 下命令类似

如果精确判断一个IP是否被占用

在 PC 或服务器的 ARP 列表中,只会存与网卡相连的同网段网络 MAC,而不会存跨网络网络的MAC。因为ARP是“Address Resolution Protocol”(地址解析协议)的缩写。在同网段中,通过地址解析协议,源主机可以通过目的主机的IP地址获得目的主机的MAC地址。也就是说,IP是三层网络的地址,MAC是二层网络的地址。防火墙工作在三层网络,所以在二层网络,MAC 和 IP 是可以直接被定位到的。

PC 只存同网络的 MAC 地址,跨网络如何查。跨网络的MAC可以在交换机的ARP地址表中查,如果网关在核心交换机上,那么所有需要通信的主机的IP和MAC的相对应的关系都在交换机上可以找到。所以说一个IP有没有占用,交换机肯定是知道的。

我们在交换机ruijie-8610设备上查看VLAN 25的MAC与IP的映射关系

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

如果精确判断一个IP是否被占用

交换机的 arp 列表存在缓存,当设备上线或离线时,无法找到设备时会触发ARP广播,从而刷新ARP缓存。在Windows或Linux下可以使用arp -d命令清空arp表,重新通过arpi学习更新arp表。在ping一个地址时,如果arp表为空,此时就会触发一个arp请求。有没有手动进行arp请求的方法?有,这个命令叫 arping ,与 ping 不同,ping 使用的是 ICMP 协议,而 arping 使用 arp 请求来代替 ICMP。

如果精确判断一个IP是否被占用

arping 只能 ping 同网段的IP,不能跨网络发起 arp 请求,这是二层网络通信决定的。如果存在多个网卡,此时需要指定网卡接口,不然 arping 不知道从哪个网卡接口出去。

arping -I eth0 192.168.10.1

Windows 下有没有类似的工具?有,但是第三方的,下载地址:

  • https://elifulkerson.com/projects/arp-ping.php

使用方法与 Linux 下一致

如果精确判断一个IP是否被占用

总结,通过 arping 可以精确判断一个设备的IP是否是在线状态,此时防火墙是无法阻止对方通过 arping 来 ping 你,如果在 MAC 地址层面不通,说明此网络接口网络不通。文章来源地址https://www.toymoban.com/news/detail-480482.html

到了这里,关于如果精确判断一个IP是否被占用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 判断两个IP地址(ipv4)是否在同一个网段

    我们通常会遇到的ip地址是这样的: ip地址:192.168.227.205 子网掩码:255.255.255.0 ip地址:192.168.226.202 子网掩码:255.255.255.0 下面我们把子网掩码换成255.255.252.0再来判断下: ip地址:192.168.227.205 子网掩码:255.255.252.0 ip地址:192.168.226.202 子网掩码:255.255.252.0 结论: 所以判断两

    2023年04月08日
    浏览(53)
  • C 语言 输入一个正整数,程序会利用is_prime函数判断该数是否是素数,如果是素数,输出“%d是素数“,否则输出“%d不是素数“。

    ``` 输入一个正整数,程序会利用is_prime函数判断该数是否是素数,如果是素数,输出\\\"%d是素数\\\",否则输出\\\"%d不是素数\\\"。

    2024年02月11日
    浏览(57)
  • Python判断输入的数是否为数值类型,如果是则指出类型

    题目:Python:判断输入的数是否为数值类型(int或float),如果可以的话,请指出类型。 情景: 假如有个程序,输入a和b两个数,程序可以判断a和b到底是不是数值类型(即是整数还是浮点数),若不是则要求用户重新输入,若是则对a和b进行运算(+-*/等),如果可以的话请转

    2024年02月06日
    浏览(47)
  • #MATLAB 产生一均匀分布在(-5,5)随机阵(50x2),精确到小数点后一位,并判断该矩阵中是否含有0元素

            产生一均匀分布在(-5,5)随机阵(50x2),精确到小数点后一位,并判断该矩阵中是否含有0元素 题解: 输出示例1:  a =    -3.9000    3.8000    -0.4000    3.5000     2.2000    4.8000    -4.8000   -4.6000     4.6000   -4.7000     1.7000    3.8000    -4.7000    0.3000     1.3000   -1.

    2024年02月04日
    浏览(46)
  • C#判断输入的IP地址是否合法

    代码中链接java后端时,要从界面中的输入框读取输入的ip地址,而ip地址尤其特定的格式,因此编写函数判断输入的ip地址是否格式正确,如果格式正确,则返回true;如果格式错误,则返回false。代码如下:

    2024年02月13日
    浏览(50)
  • Java 判断两个IP段是否有交集

    一、背景介绍 在有些场景,需要判断IP段是否有交集,比如:配置一些设备的过滤规则,避免IP段重复配置,需要做IP段是否重叠的校验。 IP段有交集的场景有几种: 1)IP段1包含IP段2; 2)IP段2包含IP段1; 3)IP段1的起始IP与IP段2的结束IP相同,或者IP段1的结束IP与IP段2的起始

    2024年02月16日
    浏览(45)
  • (IP地址的计算)判断两个IP是否归属于同一子网

    目录 前言 判断依据(附示例) 问题          今天在做题的时候做到了IP地址计算这一部分的题目,太久没有看过了,忘得都差不多了,所以就查阅了资料并做了如下笔记,帮助学习理解,同时把这道题的题目与网友分享的做法分享给大家,可以一起做一做,希望能帮助

    2024年02月08日
    浏览(54)
  • 如何判断本地(路由器)分配的IP是否是公网IP?

    首先说说什么是公网IP,公网IP是全球唯一IP地址。如果是联通的带宽,移动网络不能访问,分配的IP只能在联通内部访问,这个IP最多只能算是“联通内的公网IP”,不是真的公网IP。如何判断本地(路由器)分配的IP是否公网IP?有多种方法,以下供小伙伴们参考。 1.询问法:

    2024年02月14日
    浏览(51)
  • 判断两个IP是否在同一网段(SHELL实现)

    实现代码

    2024年03月19日
    浏览(80)
  • js中判断一个对象是否存在

    一、Boolean()方法 用Boolean()方法可以将Js中的任意数据类型转为布尔值: 二、用于判断xx是否存在 js一般会自动执行Boolean()方法,我们可以借此判断某个对象在js当前的执行环境中知否存在。如: 又如,可以判断当前环境下某个对象是否存在。 在为一个元素绑定了某个事件后,

    2024年02月13日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包