自己动手实现arping

自己动手实现arping只要接触过网络的人,相信对ping命令并不陌生。该命令可以用来检测本机到目标机的网络是否连通,是一种很常见的网络监测手段。对网络熟悉一点的人可能还知道ping命令的工作原理。让我们看看ping命令的介绍:DESCRIPTIONpingusestheICMPprotocol’smandatoryECHO_REQUESTdatagramtoelicitanICMPECHO_RESPONSEfromahostorgateway….

大家好,又见面了,我是你们的朋友全栈君。

只要接触过网络的人,相信对ping命令并不陌生 。该命令可以用来检测本机到目标机的网络是否连通,是一种很常见的网络监测手段。对网络熟悉一点的人可能还知道ping命令的工作原理。

让我们看看ping命令的介绍:

DESCRIPTION
       ping  uses  the  ICMP  protocol's mandatory ECHO_REQUEST datagram to elicit an ICMP ECHO_RESPONSE
       from a host or gateway.  ECHO_REQUEST datagrams (``pings'') have an IP and ICMP header,  followed
       by a struct timeval and then an arbitrary number of ``pad'' bytes used to fill out the packet.
​
       ping works with both IPv4 and IPv6. Using only one of them explicitly can be enforced by specify‐
       ing -4 or -6.
​
       ping can also send IPv6 Node  Information  Queries  (RFC4620).   Intermediate  hops  may  not  be
       allowed, because IPv6 source routing was deprecated (RFC5095).

以上是man打印的ping命令详情介绍。从中可知,ping使用了ICMP协议中的回送请求(echo-rquest)和回送应答(echo-reply)报文。

众所周知,IP协议没有差错报告或差错纠正机制,同时IP协议还缺少主机和管理查询所需要的机制。网际控制报文协议(ICMP)是设计来弥补上述缺憾的。

arping与ping类似,只是arping向目标主机发送arp数据包,用以检测一个IP是否在网络中已被使用。具体使用方式如下所示:

arping -I ens192 192.168.90.10

其中,I参数用来指定网口。

接下来,让我们使用Scapy实现一个简易版本的arping工具:

#!/usr/bin/python
from scapy.all import *
import sys
def arping(target_ip):
    conf.verb=0
    ans, unans=srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=target_ip),timeout=2)
    collection = []
    for snd, rcv in ans:
            result = rcv.sprintf(r"%ARP.psrc% %Ether.src%")
            collection.append(result)
    return collection
​
if __name__ == '__main__':
        if len(sys.argv) > 1:
            for ip in sys.argv[1:]:
                print 'ARPING %s from localhost' % (ip)
                print 'Unicast reply from %s' % arping(ip)
        else:
            print 'please input target ip\n'

以上仅仅是作为测试而用,所以没有对输入参数和输出结果进行太多的校验。把该脚本保存为arping文件,并赋予可执行权限,使用效果如下所示:

[root@node kali]# ./arping 192.168.90.22
ARPING 192.168.90.22 from localhost
Unicast reply from ['192.168.90.22 00:0c:39:39:9c:cc']

上述arping实现的具体步骤如下:

  • 构造ARP请求报文。填入发送方的物理地址、发送方的IP地址(Scapy会自动填入发送方地址信息)以及目标IP地址。目标物理地址字段全部填入0。

  • 使用数据链路层协议对ARP报文进行封装。以发送方物理地址作为源地址,以物理广播地址作为目的地址。

  • 使用srp方法发送链路帧,超时时间配置为2秒。

  • 分析srp方法返回的结果。

小结

在局域网中,如果目标主机对ICMP报文进行了屏蔽,但是此时我们又需要知道与该主机的连通性,那么可以尝试使用arping进行测试。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134288.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 苹果录屏gif_动态录屏

    苹果录屏gif_动态录屏作为一名优秀的前端程序员,想要输出内容,总需要制作一些动图(前端动效、功能预览、代码讲解等),接下来咱们说一下,使用Mac录屏,并转成Gif格式动图的方法:工具:Mac、QQ操作步骤:1.打开QQ(没有安装QQ的话,请自行安装)使用QQ聊天对话框中的截图功能(小剪刀),选中“录屏”功能。或者使用快捷键command+shift+A2.按照提示,选择要录屏的区域进行视频录制。如下图:…

  • vim/ideavim命令[通俗易懂]

    vim/ideavim命令[通俗易懂]IdeaVim插件使用技巧在IDEAIntellij小技巧和插件一文中简单介绍了一下IdeaVim插件。在这里详细总结一下这个插件在日常编程中的一些常用小技巧。供有兴趣使用这个插件,但对Vim还不十分熟悉的朋友参考。当然基本的hjkl移动光标和几种常见模式等等基本概念就略过不提了。为了确保只包含常用操作,这里提到的技巧都没有从现成文档里抄,而是凭记忆列出(不常用自然就不记得了)。估计会有所遗漏,慢慢再补充。1.切换Vim模拟器状态这个插件允许设置一个快捷键一键开启或关闭,在切换模式时会同时自

  • 两个经纬度之间的距离计算公式excel_excel经纬度坐标计算距离

    两个经纬度之间的距离计算公式excel_excel经纬度坐标计算距离已知AB列分别为起点经纬度,CD列分别终点经纬度,根据两点经纬度计算距离在E2单元格里输入:=6371004*ACOS(1-(POWER((SIN((90-B2)*PI()/180)COS(A2PI()/180)-SIN((90-D2)*PI()/180)COS(C2PI()/180)),2)+POWER((SIN((90-B2)*PI()/180)SIN(A2PI()/180)-SIN((90-D2)*PI()/180)SIN(C2PI()/180)),2)+POWER((COS((90-B2)*P

  • win10指纹识别用不了_windowshello指纹识别驱动

    win10指纹识别用不了_windowshello指纹识别驱动目前市面上除游戏本以外大多数新出的Windows10笔记本电脑都支持WindowsHello(面容、指纹、虹膜等),但是对于台式机来说,很少会有消费者专门去购置一台支持WindowsHello的主机,同时外置的USB指纹识别器价格也不便宜,所以很多人即便想和对Windows10说声Hello也不行,久而久之,即便用户想和Windows10交流也没办法,最终只能形…

  • 再论C++之垃圾回收(GC)

    再论C++之垃圾回收(GC)

    2021年11月14日
  • beanutils工具类_beanutils.copyproperties忽略null

    beanutils工具类_beanutils.copyproperties忽略null什么是BeanUtils工具BeanUtils工具是一种方便我们对JavaBean进行操作的工具,是Apache组织下的产品。BeanUtils工具一般可以方便javaBean的哪些操作?1)bean

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号