精华内容
下载资源
问答
  • Python实现简易ARP请求

    2021-01-14 06:57:24
    主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存...

    ARP简介

    地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。

    ARP工作原理

    主机A的IP地址为10.1.1.200,MAC地址为00:50:56:AB:A6:95;

    主机B的IP地址为10.1.1.80,MAC地址为00:50:56:AB:25:08;

    当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(10.1.1.80)解析成主机B的MAC地址,以下为工作流程:

    第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是10.1.1.80。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。

    第2步:如果主机A在ARP缓存中没有找到映射,它将询问10.1.1.80的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。

    第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。

    第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。

    第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

    ARP数据包

    ARP_Request

    ARP_Response

    Python实现ARP Request

    #!/usr/bin/env python3

    # -*- encoding = utf-8 -*-

    # 该代码由本人学习时编写,仅供自娱自乐!

    # 本人QQ:1945962391

    # 欢迎留言讨论,共同学习进步!

    from netifaces import interfaces, ifaddresses, AF_INET, AF_INET6

    from scapy.layers.l2 import ARP

    from scapy.sendrecv import sr1

    import netifaces as ni

    import platform

    import netifaces

    import time

    def get_connection_name_from_guid(iface_guids): # 获取接口名称

    if platform.system() == "Windows":

    import winreg as wr

    # 产生接口名字清单,默认全部填写上'(unknown)'

    iface_names = ['(unknown)' for i in range(len(iface_guids))]

    # 打开"HKEY_LOCAL_MACHINE"

    reg = wr.ConnectRegistry(None, wr.HKEY_LOCAL_MACHINE)

    # 打开r'SYSTEM\CurrentControlSet\Control\Network\{4d36e972-e325-11ce-bfc1-08002be10318}'

    #

    reg_key = wr.OpenKey(reg, r'SYSTEM\CurrentControlSet\Control\Network\{4d36e972-e325-11ce-bfc1-08002be10318}')

    for i in range(len(iface_guids)):

    try:

    # 尝试读取每一个接口ID下对应的Name

    reg_subkey = wr.OpenKey(reg_key, iface_guids[i] + r'\Connection')

    # 如果存在Name,就按照顺序写入iface_names

    iface_names[i] = wr.QueryValueEx(reg_subkey, 'Name')[0]

    except FileNotFoundError:

    pass

    # 把iface_guids, iface_names 压在一起返回

    return zip(iface_guids, iface_names)

    def get_ifname(ifname):

    if platform.system() == "Linux":

    return ifname

    elif platform.system() == "Windows":

    import winreg as wr

    x = ni.interfaces()

    for i in get_connection_name_from_guid(x):

    # 找到名字所对应的接口ID并返回

    if i[1] == ifname:

    return i[0]

    else:

    print('操作系统不支持,本脚本只能工作在Windows或者Linux环境!')

    def get_mac_address(ifname): # 获取接口MAC地址

    return netifaces.ifaddresses(get_ifname(ifname))[netifaces.AF_LINK][0]['addr']

    def get_ip_address(ifname): # 获取接口ip地址

    return ifaddresses(get_ifname(ifname))[AF_INET][0]['addr']

    def get_ipv6_address(ifname): # 获取接口ipv6地址

    return ifaddresses(get_ifname(ifname))[AF_INET6][0]['addr']

    def arp_request(dst, ifname): # 构建arp请求函数

    hwsrc = get_mac_address(ifname)

    psrc = get_ip_address(ifname)

    try:

    arp_pkt = sr1(ARP(op=1, hwsrc=hwsrc, psrc=psrc, pdst=dst), timeout=5, verbose=False)

    return dst, arp_pkt.getlayer(ARP).fields['hwsrc']

    except AttributeError:

    return dst, None

    if __name__ == '__main__':

    hostname = input('请输入需要请求的目的IP地址:')

    iface = input('请输入本机网卡接口名称:')

    print('正在请求', hostname, '的MAC地址,请稍等!')

    time.sleep(2)

    arp_result = arp_request(hostname, iface)

    if arp_result[1] != None:

    print('请求结果如下:')

    print('主机:', arp_result[0], 'MAC地址为:', arp_result[1])

    else:

    print('请求失败。请确保网络可达!')

    使用方式及测试效果

    测试效果

    展开全文
  • 路由器IP192.168.2.1/24 , PC 192.168.3.1/24 ,两设备不同网段, PC发起arp请求广播请求到达路由器,路由器接收到ARP报文,和自己的掩码做比对,发现不同网段因此不回复ARP reply PC端数据包: 路由器上数据包: 方式2: ...

    方式1:在这里插入图片描述
    如图:
    路由器IP192.168.2.1/24 , PC 192.168.3.1/24 ,两设备不同网段, PC发起arp请求广播请求到达路由器,路由器接收到ARP报文,和自己的掩码做比对,发现不同网段因此不回复ARP reply
    PC端数据包:
    在这里插入图片描述

    路由器上数据包:
    在这里插入图片描述

    方式2:
    在这里插入图片描述
    路由器IP 192.168.2.1/20 , pc 192.168.3.1/24 ,路由器发起的arp request 到达pc端,pc直接回复arp reply,双方可以相互ping通.

    路由器端数据包:
    在这里插入图片描述

    方式3:
    在这里插入图片描述
    路由器IP 192.168.2.1/20 , pc 192.168.3.1/24 ,pc发起的arp request 到达路由器路由器发现192.168.3.1/24在自己的网段内因此恢复arp reply,双方可以相互ping通.
    pc端数据包
    在这里插入图片描述
    路由器端数据包
    在这里插入图片描述
    ping测试在这里插入图片描述

    结论:

    路由器接口收到非同网段的arp请求后会验证源ip是否跟自己同网段,同网段回复ARP reply, PC 不检查 arp请求是否和自己的ip同网段,都会直接回复ARP reply.

    补充ensp上实验测试:
    在这里插入图片描述

    配置

    Ar1
    int g0/0/0
    ip add 192.168.2.1 24
    ip router-s 0.0.0.0 0.0.0.0 g0/0/0
    
    Ar2
    int g0/0/0
    ip add 192.168.3.1 24
    ip router-s 0.0.0.0 0.0.0.0 g0/0/0
    

    AR1和AR2 无法通讯,不同网段不会回复ARP request

    修改

    AR1
    int g0/0/0
    ip add 192.168.2.1 20
    

    由AR2 发起的ARP request 可以被AR1 回应.
    ping测试正常
    在这里插入图片描述

    当AR1 上MAC地址老化后
    或者使用 un mac-add all //有时不起作用,重启AR1 清空mac表项
    由AR1 发起ARP request 的数据包,AR2 检查不在同网段,因此不会回复,无法ping 通
    在这里插入图片描述

    AR1 重启后ping测试
    在这里插入图片描述

    展开全文
  • 可如何获得局域网其他主机的MAC地址呢…链路层广播ARP请求,然后接收ARP响应。实现介个功能其实已有现成三方库可用,如libnet。不过想加深对协议的理解和Linux网络编程API的理解,jiayi 还是决定用Linux的PF_PACKET...

    Linux 中获得本机网卡MAC地址很简单,ioctl()就OK。可如何获得局域网其他主机的MAC地址呢…链路层广播ARP请求,然后接收ARP响应。实现介个功能其实已有现成三方库可用,如libnet。不过想加深对协议的理解和Linux网络编程API的理解,jiayi 还是决定用Linux的PF_PACKET自己实现,改啊改,终于成功~以下是大体思路

    1. 为数据报分配空间,创建相应的结构体 req,arp 数据报的帧格式如图

    2. 创建 PF_PACKET 原始套接字,发送套接字为 reqfd,接收套接字为 recvfd

    3. 填写链路层通用结构体 reqsa

    3. get_ifi()获取本机网络接口数据,填写要发送的ARP数据报 req 结构体,sendto()发送

    4. 循环recvfrom()接收ARP响应,滤掉经由本地接口的其他ARP数据报

    发送ARP请求能做的事不仅仅获取MAC地址吧…其他“有意义”的事也可以尝试一下下……下面是代码

    C code

    /**

    * @send_arp.c

    * @This software is intended to be used as a example to show how to send and receive arp request with Linux * PF_PACKET interface

    * @Author:jiayi,http://www.jiayii.com

    **/

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include /* 需要里面的 glibc 版本号 */

    #if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1

    #include

    #include /* 链路层(L2)协议 */

    #else

    #include

    #include

    #include /* 链路层协议 */

    #endif

    #include

    #define INLEN 4

    #define MAC_BCAST_ADDR  (uint8_t *) "\xff\xff\xff\xff\xff\xff"

    void usage_quit(char *arg0);

    int get_ifi(char *

    展开全文
  • Is there a way to send ARP request within a Java application? I know that ARP is sitting a layer under TCP and UDP therefore by default Java couldn't send ARP request. I am just wondering is there a.....

    Is there a way to send ARP request within a Java application? I know that ARP is sitting a layer under TCP and UDP therefore by default Java couldn't send ARP request. I am just wondering is there any 3rd party Java library that will allow you to send ARP request.

    To capture ARP reply, I know I can use jpcap so that part is solved.

    Thanks

    解决方案

    A java app can always execute some external command, calling another tool to do it. I'm not sure what you mean by "standard java" though.

    Based on googling, there seems to be arping in kraken pcap which is in Java. See about Kraken.

    There's also jpcap as well that's used for the purpose.

    展开全文
  • arp请求 复制链接收藏本文打印本文关闭本文返回首页 上一篇:python抓取京东价格分析京东商品价格走势 下一篇:windows下wxPython开发环境安装与配置方法 相关文章 2013-12-12python解析模块(ConfigParser)使用方法 ...
  • ) In [2]: results, unanswered = sr(ARP(op=ARP.who_has, psrc='192.168.1.2', pdst='192.168.1.1')) Begin emission: .....*Finished to send 1 packets. Received 6 packets, got 1 answers, remaining 0 packets...
  • arping命令作用是使用arp数据包,通过ping命令检查来测试网络。arping命令能够测试一个ip地址是否是在网络上已经被使用,并能够获取更多设备信息。功能类似于ping。由于arping命令基于ARP广播机制,所以arping命令...
  • WIZnet芯片在UDP模式,在发送第一个UDP数据包之前发送一次ARP请求数据包,然后它会将数据连续发送到同一个Peer。可以通过设置MR2 (Mode Register 2)的FARP寄存器来设置强制ARP功能,如果此位设置为“1”,它为每个...
  • 举出至少两种不需要发送ARP请求分组的情况(即不需要请求将某个目的IP地址解析为相应的硬件地址) (1)在源主机的ARP高速缓存中已经有了该目的IP地址的项目; (2)源主机发送的是广播分组; (3)源主机和目的主机...
  • 我正在尝试从SDN OpenFlow交换机发送ARP请求以查找预定义主机的MAC地址(主机的IP地址已知:10.0.0.8/24)我正在尝试为控制器使用虚拟IP和MAC地址 .控制器的虚拟IP:10.1.2.3控制器的虚拟MAC地址:00:12:34:56:78...
  • //发送ARP请求 sendto(sockFd,msg,sizeof(msg),0,(struct sockaddr*)&sll,sizeof(sll)); pthread_join(tid,NULL); close(sockFd); return 0; } 结构体方式封包 struct arphdr所在位置: /usr/include/...
  • 本文是将Linux socket发送ARP请求包 C语言中的功能模块进一步编写成为了工具 使得可以修改ARP请求包中的源IP地址、目标IP地址以及源MAC地址 测试平台是kali #使用演示 程序有两种输入模式,一种是包含源IP、目标...
  • (MAC地址是我们设备在出厂的时候就拥有的一个独一无二的地址,用来标识路由器) 在数据包发送前,先进行ARP请求后,告诉路由器,下一站按照这个MAC地址,去找下一个路由器。下一个路由器同样会根据数据包的ip地址...
  • 698-详解ARP协议

    2021-10-17 18:47:21
    主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存...
  •  是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包检查局域网内所有设备的硬件地址。 arping 命令的参数选项及说明 -c <次数> 发送指定次数的arp报文后退出命令 -f 当收到第一个应答报文时,立即...
  • 原理:构造一个arp请求数据帧发送给带检测的机器。通过是收到arp响应判断带检测的机器是否处于混杂模式。首先构造出下面的数据帧。ARP分组:目的以太网地址 00 00 00 00 00 00(说明1)发送方以太网地址 00 11 22 33 ...
  • ARP协议

    2021-03-23 10:12:37
    ARP请求报文 数据通信的基础是在以网卡为硬件的数据链路层发送和接收的,如果想实现两台主机通信,必须知道目标主机的硬件地址,即MAC地址 主机A想要发送数据给主机B,我们知道发送网络报文是一个封装的过程,...
  • 很多学习计算机的同学,已经对做实验见怪不怪了吧,那么计算机网络arp的...掌握arp请求和应答的实现方法5.掌握arp缓存表的维护过程练习一:实验名称:领略真实的arp(同一子网)实验内容:各主机打开协议分析器,进入相应...
  • ARP协议就是用来获取目标IP地址所对应的MAC地址的,也就是说,ARP协议可以动态地在三层IP地址和二层MAC地址之间建立一种映射关系。可以用如下示意图来形象表示其作用: 可以看到上面的图示是把ARP协议划分到网络...
  • ARP协议详解

    千次阅读 2021-02-05 18:31:16
    由于之前学习过ARP的知识,但是掌握的不是很好,所以写个总给来重温一下 1.什么是ARP ARP:地址解析协议(Address Resolution Protocol) ... 字段1是ARP请求的目的以太网地址,全1时代表广播地址。  字段2是发送ARP
  • 一文搞懂ARP协议

    2021-05-09 12:28:39
    什么是ARPARP是Address Resolution Protocol的首字母缩写,即地址解析协议。 如果一台主机要将一个帧发送到另一台主机,只知道这台主机的IP地址是不够的,还需要知道主机的硬件地址。 对于以太网而言,硬件...
  • 计算机网络协议分析 第四课第3章 地址解析协议ARP3.1 ARP工作原理本网络中ARP的应用跨网使用ARP3.2 ARP分组ARP分组ARP分组格式3.3 ARP欺骗3.4 免费ARP3.5 代理ARP3.6 反向地址解析协议RARP无盘计算机获取IPRARP工作...
  • 实验二地址解析协议(arp) (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!19.90 积分院院 系:计系:计 算算 机机 学学 院院实验课程:计算机网络与因特网实验课程:...
  • ARP详解

    2021-09-16 18:40:38
    1、 ARP是工作在链路层的,ARP请求发送一个帧。 帧分为两部分:帧头部、ARP请求数据。 上图是帧的结构: 1、 帧的头部的目的MAC地址为FFFFFFFFFFFF,表示这是一个广播帧,会转发给网络中的所有主机。 2、 帧的头部...
  • 实验1ARP协议分析实验《计算机网络》实验指导书实验一、实验...三、实验原理、方法和手段操作类型:1—ARP 请求;2—ARP 响应;3-- RARP请求;4—RARP 响应;四、实验条件Wireshark协议分析软件;(2)应用协议环境每...
  • Arp命令

    2021-07-04 03:09:38
    ARP命令用于显示和修改“地址解析协议(ARP)”缓存中的项目。ARP缓存中包含一个或多个表,它们用于存储IP地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌环网络适配器都有自己单独的表...
  • arp协议封装关系.doc

    2021-08-02 01:18:28
    arp协议封装关系篇一:ARP协议解释前言:ARP协议的作用:1. 什么是ARP?ARP (Address Resolution Protocol) 是个地址解析协议。最直白的说法是:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能...
  •   在图解ARP协议(一)文章里,普及了ARP协议的基本原理,包括ARP请求应答、数据包结构以及协议分层标准,今天我们继续讨论大家最感兴趣的话题:ARP攻击原理是什么?通过ARP攻击可以做什么,账号是否可以被窃取?...
  • 接收端(PC-B):获取本机真实IP 和MAC 地址后,自动跳到“ARP 高速缓存表”模拟页面,等待“交换机”将ARP请求报文转发过来后修改ARP 高速缓存表,再自己跳转到ARP 响应报文页面,逐步封装。封装完毕则自动向...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 75,086
精华内容 30,034
关键字:

arp请求