MAC-адрес назначения, используемый при отправке на удаленный хост (это мой маршрутизатор)? - PullRequest
0 голосов
/ 04 ноября 2018

По разным причинам я пытаюсь создать и отправить необработанные TCP-пакеты на удаленный хост (например, google.com) с необработанными сокетами. Я пытаюсь использовать pcap, так что необработанный код сокета может быть перенесен в Windows в какой-то момент.

Выглядит довольно просто ... 1. сетевой заголовок 2. заголовок ip 3. заголовок tcp 4. сегмент (необязательно)

2,3,4 просты. № 1 - проблема, потому что я не знаю, что использовать для MAC-адреса назначения google.com. Из того, что я могу сказать, ARP бесполезно сообщать мне, что MAC, потому что я должен быть подключен к маршрутизатору Google, чтобы он работал. Загвоздка.

Итак, это заставляет меня задать этот вопрос:

Должен ли я использовать MAC-адрес моего маршрутизатора в качестве MAC-адреса назначения в заголовке Ethernet при отправке на хост, не находящийся в локальной сети? И когда пакет пересылается, каждый маршрутизатор, с которым он сталкивается, вырывает этот заголовок Ethernet и заменяет его соответствующими MAC-адресами источника / назначения, чтобы он попадал на Google.com? Это единственное, что звучит разумно.

Примечание: я думаю это была мотивация, но вопрос так и не был решен: как определить MAC-адрес назначения

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Когда-то еще даже я столкнулся с той же путаницей. Короче говоря, да, MAC-адрес назначения будет MAC-адресом маршрутизатора шлюза. И о том, как я решил - вот так -

  1. Я использовал команду

    route -n
    
  2. Тогда я использовал команду

    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 с использованием необработанных сокетов выглядит следующим образом -

https://github.com/Goutam1511/Socket-Programming-with-C/blob/master/myping.c

Несмотря на поздний ответ, я надеюсь, что это может помочь кому-то еще, потому что очень мало ресурсов, связанных с использованием необработанного сокета на канальном уровне.

0 голосов
/ 15 декабря 2018

Это верно. MAC-адрес источника в заголовке Ethernet должен быть MAC-адресом интерфейса, с которого вы отправляете, а MAC-адрес назначения должен быть MAC-адресом вашего маршрутизатора на его интерфейсе, который подключен к вашей локальной сети.

Важно помнить, что адреса канального уровня используются в сетях (в этом случае и ваш MAC-адрес, и внутренний интерфейс вашего маршрутизатора находятся в вашей локальной сети), а адресация сетевого уровня (IPv4 / IPv6) используется для маршрутизации вашего пакет от исходного хоста к хосту назначения (это игнорирует NAT и целый ряд других грубостей, возникающих в IPv4).

Что произойдет, когда вы отправите свой Ethernet-фрейм из вашего интерфейса, будет следующим:

  1. Ваш маршрутизатор получит фрейм после прохождения через 0 или более коммутаторов, которые знают, где внутренний MAC-адрес вашего маршрутизатора от получения трафика от него в прошлом. Ваш маршрутизатор знает, что кадр предназначен для него, потому что его внутренний MAC-адрес является MAC-адресом назначения.
  2. Ваш маршрутизатор отключит заголовок Ethernet. Затем он проверит IP-адрес назначения и определит, как переслать этот пакет на основе этого адреса. Если мы говорим о вашем домашнем маршрутизаторе, возможно, он также меняет исходный IP-адрес (что называется трансляцией сетевых адресов или NAT), но, поскольку это не входит в сферу вашего вопроса, я оставлю это в покое.
  3. Прежде чем переслать пакет следующему маршрутизатору на пути к IP-адресу назначения, маршрутизатору необходимо поместить еще один заголовок канального уровня на дейтаграмму IP, поскольку он удаляет тот, который вы на него наделили. Таким образом, он создаст новый заголовок канального уровня, используя MAC-адрес своего исходящего интерфейса в качестве MAC-адреса источника и MAC-адрес внутреннего MAC-адреса следующего маршрутизатора в качестве пункта назначения. Таким образом, заголовок Link-Layer перезаписывается "hop-by-hop".
...