2

Я только что изучил книгу «Сеть +», где она объясняет содержимое кадра, используя блоки для представления набора битов. Двигаясь дальше, он заявляет, что первым «блоком» является MAC-адрес получателя. Блок после этого является MAC-адресом отправителя.

Мне было интересно, возможно ли перехватить кадр перед его отправкой, обнулить MAC-адрес отправителя (или записать случайный вместо вашего фактического MAC-адреса) перед отправкой кадра?

1 ответ1

6

Ethernet

Через Ethernet - да, весь кадр, включая его заголовок Ethernet, отправляется операционной системой, и ОС решает, какой исходный MAC-адрес использовать.

  • Фактически, системы виртуальных машин (например, VMware или Hyper-V) уже используют это для подключения виртуальных машин к реальной локальной сети - у вас может быть несколько виртуальных машин, подключенных к одной карте Ethernet, и каждая виртуальная машина будет иметь свой собственный MAC-адрес, независимый от хоста ,

  • Linux, FreeBSD, Windows даже имеют возможность создавать «мосты», соединяющие несколько физических интерфейсов Ethernet, работая точно так же, как реальный коммутатор Ethernet (даже с VLAN и RSTP).

методы

Вы можете либо изменить MAC-адрес сетевого интерфейса (указав ОС использовать новый адрес для всего, что оно передает), либо использовать "сырые сокеты" из отдельной программы для создания и отправки чего угодно, минуя стек TCP/IP , Для последнего используйте существующие инструменты, такие как libpcap, Scapy или Nemesis.

  • В Linux ip link меняет MAC-адрес до следующей перезагрузки:

    # ip link set eth0 down
    # ip link set eth0 addr ab:cd:ef:ab:cd:ef
    # ip link set eth0 up
    
  • Или отправьте отдельные пакеты со scapy:

    >>> send(Ether(src="ab:cd:ef:ab:cd:ef", dst="ff:ff:ff:ff:ff:ff")/IP(src="1.2.3.4", dst="3.4.5.6")/UDP(dport=9)/b"hello")
    Sent 1 packets.
    
  • В Linux даже есть функция "macvlan" для создания виртуальных интерфейсов с разными MAC на одной физической карте Ethernet:

    # ip link add fred0 link eth0 type macvlan mode private
    

Wi-Fi

Wi-Fi немного более ограничен - вы не можете отправлять отдельные пакеты с поддельным источником, так как точки доступа отслеживают все связанные с ним станции и будут (AFAIK) отбрасывать пакеты, приходящие с любого MAC-адреса, которого нет на "связанных станциях" "список.

(Это с точки зрения станции. Точки доступа могут делать все, что хотят - в конце концов, это часть их работы - отправлять пакеты от имени проводных устройств.)

Однако вы все равно можете установить другой MAC-адрес на беспроводном интерфейсе и использовать этот новый адрес для всего, начиная с ассоциации / аутентификации для точки доступа.

Однако, в отличие от Ethernet, возможность сделать это зависит от конкретного беспроводного оборудования и драйверов (например, Atheros обычно поддерживает это, в то время как некоторые карты Realtek могут этого не делать). В Linux должна работать та же команда ip link … .

Мост L2

Тем не менее, есть способы реализовать мост 2-го уровня с помощью Wi-Fi (например, если вам нужно подключить все здание по радиоканалу).

(Хорошо, теперь это немного не по теме, но для полноты.)

Это немного сложнее, чем Ethernet, поскольку существуют отдельные концепции исходного источника (хоста, который сгенерировал пакет) и передатчика (радио Wi-Fi, которое передало пакет); аналогично, приемник (радиоприемник Wi-Fi, который получил пакет) и конечный пункт назначения (хост, который будет читать / принимать пакет).

  • Например, если компьютер A (например, ноутбук) отправляет пакет к компьютеру B через WiFi, он будет иметь такие заголовки:

    • из (первоисточник): <адрес компьютера A>
    • на (получение радио Wi-Fi): <адрес маршрутизатора Wi-Fi>
    • до (конечный пункт назначения): <адрес компьютера B>

    Обратите внимание, что существует только один "исходящий" адрес, при условии, что обычные станции Wi-Fi никогда не будут отправлять пакеты от имени какого-либо другого устройства. Это экономит 6 байтов на пакет.

  • Это обратный путь от точки доступа к станции - есть два адреса "от", "исходный отправитель" и "передающая точка доступа", но только один адрес "до".

Поэтому, когда вам нужно соединить две сети Ethernet через Wi-Fi, вам нужен режим "WDS", или "4addr", который заставляет отправлять все четыре адреса - два источника и два адресата вместе с каждым кадром Wi-Fi. Поддержка этого варьируется. В Linux вы можете сделать это через iw .

Обратите внимание, что режим WDS/4addr должен быть включен на обоих концах.

L2 NAT

Некоторые системы, такие как VirtualBox или радио Ubiquiti airMAX (при настройке в качестве станции без WDS), или OpenWRT в той же конфигурации, поддерживают трансляцию MAC-адресов: маскировку нескольких клиентов между собственными MAC-адресами станции, очень похожими на IPv4 NAT, но на Нижний уровень. Это работает без какой-либо конфигурации и может быть более эффективным; однако это создает проблемы, если что-то вроде DHCP-сервера зависит от MAC-адресов клиентов.

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

блютуз

Я не уверен насчет Bluetooth. AFAIK, большинство адаптеров не позволят вам ни изменять, ни каким-либо иным образом подделывать свои MAC-адреса, поскольку это единственный метод адресации, используемый всеми коммуникациями - устройства распознают друг друга по своим MAC-адресам и сохраняют ключи связи на основе MAC-адреса ... Тем не мение. Не моя область.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .