发送IP时的ARP在每个数据包中都是错误的

发送IP时的ARP在每个数据包中都是错误的,ip,packet,arp,Ip,Packet,Arp,我今天在操作系统考试中遇到了一个问题。 给定一个“伪造”每个发送包中的IP地址的过程(给出错误的IP地址),ARP是否正常工作 我坚持认为没有,因为数据包不知道在哪里返回“ack” 我很想听听你的意见。我想它会知道把ack返回到哪里,因为发送者发送他的MAC地址,这才是最重要的。然而,我认为这是行不通的,因为接收者会根据他从发送者那里得到的MAC和IP改变他的ARP表。(这是一个微不足道的优化) 我坚持认为没有,因为数据包不知道在哪里返回“ack” 它返回到发送方的MAC地址,而不是IP地址 发

我今天在操作系统考试中遇到了一个问题。 给定一个“伪造”每个发送包中的IP地址的过程(给出错误的IP地址),ARP是否正常工作

我坚持认为没有,因为数据包不知道在哪里返回“ack”


我很想听听你的意见。

我想它会知道把ack返回到哪里,因为发送者发送他的MAC地址,这才是最重要的。然而,我认为这是行不通的,因为接收者会根据他从发送者那里得到的MAC和IP改变他的ARP表。(这是一个微不足道的优化)

我坚持认为没有,因为数据包不知道在哪里返回“ack”

它返回到发送方的MAC地址,而不是IP地址

发件人:

当接收到地址解析数据包时,接收以太网 模块将数据包提供给地址解析模块,地址解析模块 通过类似于以下的算法。否定条件句 指示处理结束和数据包丢弃

?硬件类型是否为ar$hrd?
是的:(几乎可以肯定)
[可选检查硬件长度ar$hln]
?我是否用ar$pro语言讲协议?
对:
[可选检查协议长度ar$pln]
合并标志:=假
如果这对是
已在我的翻译表中,请更新发件人
具有新名称的条目的硬件地址字段
数据包中的信息,并将Merge_标志设置为true。
?我是目标协议地址吗?
对:
如果Merge_标志为false,则将三元组添加到
翻译表。
?操作码是否为ares_op$请求?(现在看看操作码!!)
对:
交换硬件和协议字段,将本地
发送方字段中的硬件和协议地址。
将ar$op字段设置为ares_op$REPLY
将数据包发送到上的(新)目标硬件地址
接收请求的硬件相同。
这意味着什么? 虽然IP地址也可以包含在数据包的发送方协议地址(SPA)字段中,但返回地址使用MAC。这意味着,尽管发送方IP地址(SPA)是伪造的,但在您的问题中没有提到发送方硬件地址(SHA)是伪造的

这意味着发送方将收到ARP回复,ARP将正常工作(从发送方机器的角度)。但是,由于ARP数据包包含伪造的SPA,目标机器(可能还有网络上的其他设备)会将发送方关联为具有该IP地址,从而成功发起攻击:

e、 g.Linux忽略未经请求的回复,但另一方面使用来自其他机器的SEED请求来更新其缓存

?Do I have the hardware type in ar$hrd?
Yes: (almost definitely)
  [optionally check the hardware length ar$hln]
  ?Do I speak the protocol in ar$pro?
  Yes:
    [optionally check the protocol length ar$pln]
    Merge_flag := false
    If the pair <protocol type, sender protocol address> is
        already in my translation table, update the sender
    hardware address field of the entry with the new
    information in the packet and set Merge_flag to true. 
    ?Am I the target protocol address?
    Yes:
      If Merge_flag is false, add the triplet <protocol type,
          sender protocol address, sender hardware address> to
      the translation table.
      ?Is the opcode ares_op$REQUEST?  (NOW look at the opcode!!)
      Yes:
    Swap hardware and protocol fields, putting the local
        hardware and protocol addresses in the sender fields.
    Set the ar$op field to ares_op$REPLY
    Send the packet to the (new) target hardware address on
        the same hardware on which the request was received.