计算机网络基础(五)ARP协议的工作原理


ARP即地址解析协议(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议

ARP协议的工作原理

假设局域网里面有两台主机:

      主机A: IP地址为 192.168.0.1   MAC地址为12-34-56-78-90-00
      主机B: IP地址为 192.168.0.2   MAC地址为12-34-56-78-90-01
      当主机A要和主机B进行通信的时候,主机A先查找自己机器上的ARP缓存,看看有没有主机B对应的MAC地址,如果有的话,直接传;如果没有的话,发送一个ARP请求包,具体的内容可以理解为:我是主机A,我的IP是192.168.0.1,我的MAC地址是12-34-56-78-90-00,你们的MAC地址是多少?
      当主机B收到主机A的ARP请求包之后,先把主机A的IP地址和MAC地址对应起来保存在自己机器上的ARP缓存中,然后会给主机B回复一个ARP回复包,回复包的具体内容可以理解为:我是192.168.0.1,我的MAC地址是12-34-56-78-90-01。当主机A收到主机B的ARP回复包之后,把主机B的IP地址和MAC地址对应起来保存在自己的ARP缓存中,此时,主机A就可以和主机B进行通信了。
      ARP请求包:ARP请求包是广播包,广播的目的MAC地址为FF-FF-FF-FF-FF-FF,当交换机接收到广播包,会把这个包转发给所有端口上的主机。

      ARP回复包:ARP回复包是单播包,目的MAC地址是刚才发送ARP请求包的机器的MAC地址。


如何清除ARP病毒

      ARP病毒的中毒特征:
      本来可以上网的机器不能上网了,ping其它的机器也ping不通,重启或者在DOS窗口下运行命令arp -d后又可以短时间上网。

       ARP病毒的手工防治:
      在可以上网的时候,在DOS命令行下输入arp -a 查看网关IP对应的正确MAC地址,记下这个MAC地址。
C:\Documents and Settings\user>arp -a
Interface: 192.168.1.101 --- 0x4
  Internet Address      Physical Address      Type
  192.168.1.1           00-14-78-fe-51-c6     dynamic
      这个是我电脑上的信息,网关的地址是192.168.1.1,物理地址是:00-14-78-fe-51-c6,后面的Type显示的是动态绑定的,那就说明可以改变。我们可以通过  arp -s 192.168.1.1 00-14-78-fe-51-c6  来绑定MAC地址,手工绑定之后,就不会受攻击的影响了。具体的绑定的网关地址和相应的MAC地址改成您自己的地址。
      更简单的办法就是去下载个ARP防火墙,360安全卫士的就不错,具体的可以去 360.cn 那里去下载一个ARP防火墙。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ARP协议地址解析协议)是一种用于将网络地址(如IP地址)解析为数据链路层地址(如MAC地址)的协议。其工作原理如下: 1.当主机A需要向主机B发送数据时,首先检查其ARP高速缓存(ARP Cache)中是否有主机B的IP地址对应的MAC地址。如果有,则直接将数据帧发送给主机B的MAC地址;如果没有,则执行第2步。 2.主机A向网络广播一个ARP请求包,请求包中包含主机A的IP地址和MAC地址,以及主机B的IP地址网络中所有主机都会收到这个请求包,但只有主机B会响应。 3.主机B收到ARP请求包后,会向主机A单独发送一个ARP响应包,响应包中包含主机B的IP地址和MAC地址。 4.主机A收到ARP响应包后,将主机B的IP地址和MAC地址存入其ARP高速缓存中,并将数据帧发送给主机B的MAC地址。 下面是一个简单的Python实现,用于发送ARP请求并接收ARP响应: ```python import socket import struct def get_mac_address(ip_address): # 创建ARP请求包 arp_request = struct.pack("!HHHBBH6s4s6s4s", # ARP请求包格式 0x0001, # 硬件类型:以太网 0x0800, # 协议类型:IPv4 0x0006, # 硬件地址长度:6 0x0004, # 协议地址长度:4 0x0001, # 操作类型:ARP请求 b"\x00\x00\x00\x00\x00\x00", # 发送方MAC地址 socket.inet_aton("192.168.1.100"), # 发送方IP地址 b"\x00\x00\x00\x00\x00\x00", # 目标MAC地址 socket.inet_aton(ip_address)) # 目标IP地址 # 创建套接字并发送ARP请求包 s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.SOCK_RAW) s.bind(("eth0", socket.SOCK_RAW)) s.send(arp_request) # 接收ARP响应包 while True: packet = s.recvfrom(2048)[0] eth_header = struct.unpack("!6s6sH", packet[:14]) if eth_header[2] == 0x0806: # 如果是ARP响应包 arp_header = struct.unpack("2s2s1s1s2s6s4s6s4s", packet[14:42]) if socket.inet_ntoa(arp_header[6]) == ip_address: return ":".join("{:02x}".format(ord(c)) for c in arp_header[5]) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值