我在今天的操作系统考试中遇到过一个问题。 鉴于一个过程"伪造"每个发送的数据包中的IP地址(给出错误的IP地址),ARP是否正常工作?
我认为它没有,因为数据包不知道在哪里返回" ack"。
很想听听你的意见。
答案 0 :(得分:2)
我认为它没有,因为数据包不知道在哪里返回" ack"。
返回发件人的MAC地址,而不是IP地址。
来自RFC 826:
当收到地址解析数据包时,接收以太网 模块将数据包提供给地址解析模块 通过类似于以下的算法。负面条件 表示处理结束和丢弃数据包。
?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.
ARP,尽管IP地址也可以包含在数据包的发送方协议地址(SPA)字段中。这意味着虽然发件人IP地址(SPA)是欺骗性的,但在您的问题中没有提到发件人硬件地址(SHA)被欺骗。
这意味着发件人将接收ARP回复并且ARP将起作用(从发送机器的角度来看)。但是,由于ARP数据包包含欺骗性SPA,目标计算机(以及可能是网络上的其他设备)会将发送方关联为具有该IP地址,从而实现ARP poisoning攻击成功:
e.g。 Linux忽略了未经请求的回复,但另一方面则使用来自其他计算机的请求来更新其缓存。
答案 1 :(得分:0)
我认为它会知道将ack返回到哪里,因为发件人发送了他的MAC地址,这才是最重要的。但我认为它不会起作用,因为接收方将根据他从发送方获得的MAC和IP来改变他的ARP表。 (这是一个微不足道的优化)。