Mac address 发送到远程主机时要使用的目标MAC(是我的路由器吗)?
出于各种原因,我试图构造原始TCP数据包,并将其发送到具有原始套接字的远程主机(例如google.com)。我正在尝试使用pcap,因此原始套接字代码可以在某个时候移植到Windows 看起来很简单。。。 1.以太网报头 2.ip报头 3.tcp报头 4.段(可选) 2、3、4都很简单#1是难点,因为我不知道google.com的目标MAC地址应该使用什么。据我所知,ARP告诉我MAC是无用的,因为我必须连接到谷歌的路由器才能工作。障碍 所以我要问这个问题: 当发送到不在LAN中的主机时,是否应使用路由器的MAC作为以太网报头中的目标MAC地址?当数据包被转发时,它碰到的每一个路由器是否都会撕掉以太网报头,并用合适的源/目的MAC替换它,这样它就可以访问Google.com了?这是唯一听起来合理的事情 旁注,我认为这是这里的动机,但问题始终没有完全解决:Mac address 发送到远程主机时要使用的目标MAC(是我的路由器吗)?,mac-address,raw-sockets,Mac Address,Raw Sockets,出于各种原因,我试图构造原始TCP数据包,并将其发送到具有原始套接字的远程主机(例如google.com)。我正在尝试使用pcap,因此原始套接字代码可以在某个时候移植到Windows 看起来很简单。。。 1.以太网报头 2.ip报头 3.tcp报头 4.段(可选) 2、3、4都很简单#1是难点,因为我不知道google.com的目标MAC地址应该使用什么。据我所知,ARP告诉我MAC是无用的,因为我必须连接到谷歌的路由器才能工作。障碍 所以我要问这个问题: 当发送到不在LAN中的主机时,是否应
没错。ethernet报头中的源MAC地址应该是从中发送的接口的MAC地址,目标MAC地址应该是路由器在其连接到LAN的接口上的MAC地址 请务必记住,链路层地址在网络中使用(在本例中,您的MAC地址和路由器的内部接口都在LAN上),而网络层(IPv4/IPv6)地址用于将数据包从源主机路由到目标主机(这忽略了NAT和IPv4中出现的一大堆其他粗俗之处) 从接口发送以太网帧时会发生以下情况:
没错。以太网报头中的源MAC地址应该是您从中发送的接口的MAC地址,而目标MAC地址应该是您的路由器在其连接到LAN的接口上的MAC地址 请务必记住,链路层地址在网络中使用(在本例中,您的MAC地址和路由器的内部接口都在LAN上),而网络层(IPv4/IPv6)地址用于将数据包从源主机路由到目标主机(这忽略了NAT和IPv4中出现的一大堆其他粗俗之处) 从接口发送以太网帧时会发生以下情况:
甚至在几天前,我也面临着同样的困惑。长话短说,是的,目标MAC地址将是网关路由器MAC地址。关于我如何确定是这样的-
route -n
arp -n
route -n
arp -n
goutbose@####:~$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.39.51.1 0.0.0.0 UG 0 0 0 enp2s0f0
goutbose@###:~$ arp -n
Address HWtype HWaddress Flags Mask Iface
10.39.51.130 ether 00:1a:c5:01:12:94 C enp2s0f0
现在,您可以像我这样简单地在数据包中硬编码您的目标MAC,或者如果您愿意,您可以设计自己的ARP分辨率,这超出了我的知识范围,可以帮助您解决问题。我使用原始套接字实现自己的ICMP ping请求的实现如下-
虽然我的回复很晚,但我希望它能帮助其他人,因为在链路层中使用原始套接字的资源很少。甚至在我遇到同样的困惑之前的几天。长话短说,是的,目标MAC地址将是网关路由器MAC地址。关于我是如何确定的,就像这样-
route -n
arp -n
route -n
arp -n
goutbose@####:~$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.39.51.1 0.0.0.0 UG 0 0 0 enp2s0f0
goutbose@###:~$ arp -n
Address HWtype HWaddress Flags Mask Iface
10.39.51.130 ether 00:1a:c5:01:12:94 C enp2s0f0
现在你可以硬编码你的目标了