С помощью pcap_sendpacket
в C я вручную отправляю следующий пакет на wlan0
(Я пропустил некоторые поля, но думаю, что они правильные):
(Ethernet layer)
eth src: <wlan0 MAC address>
eth dest: <wireless router MAC address>
(ARP request layer)
opcode: 1 (Request)
sender_hw: <wlan0 MAC address>
sender_proto: 192.168.1.3 (IP of wlan0)
target_hw: 0 (per usual)
target_proto: 173.194.46.72 (Google.com)
Использование Wireshark для прослушивания wlan0
, Я ожидаю увидеть ответ ARP с MAC-адресом сервера Google. Однако я не вижу любой Ответы ARP, содержащие IP-адрес Google.
Следует отметить, что я создаю этот пакет путем перехвата запроса ARP, отправленного на виртуальный сетевой интерфейс (пакет создается, когда я использую ping
из виртуального сетевого пространства), затем переписав пакет и вставив его в wlan0
с помощью pcap
, чтобы позже получить ответ ARP и переслать его обратно в виртуальную сеть. Вот почему я относительно уверен, что другие поля в пакете верны, поскольку я действительно не изменял их.
Кто-нибудь знает, в чем может быть проблема? Одна вещь, которую я как бы замечаю, - это то, что у меня нет IP-адреса моего маршрутизатора (192.168.1.1) в этом пакете; не совсем уверен, нужно мне это или нет.
Вы _НЕ_ получение ARP-ответа, потому что в пределах вашего широковещательный домен [1] (также известный как ваш локальный сегмент [W] LAN) есть _НЕ_ хост, IP-адрес которого совпадает с тем, для которого вы запрашиваете ARP (173.194.46.72).
Чтобы быть более подробным, позвольте мне добавить, что:
ARP - это протокол уровня 2 [2] и как таковой, как уже упоминалось Zoredache: "... ARP не проходит через маршрутизатор ...". ARP-запрос обычно отправляется через" широковещательный "Ethernet-фрейм. Поэтому он не может пересекать локальный ... широковещательный домен;
даже если вы наверняка можете запросить ARP для любого IP-адреса, который вам нравится (включая Google 173.194.46.72), вы _НЕ_ получит любой ARP-ответ (кроме случаев, когда "... Google находится в вашей локальной сети ...", как указано в М. Хэмптон комментарий выше), потому что в таком случае:
К сожалению, мне не ясно, какую именно проблему вы пытаетесь решить. В любом случае, вам может быть полезно вкратце изучить:
"бесплатный ARP"[3], который следует обратной схеме по отношению к общему ARP-Request => Arp-Reply, который вы тестируете;
"Подмена / отравление ARP"[4], относительно"отказ в обслуживании"/"человек посередине"/"захват сеанса"атаки, которые вы можете перенести;
"ARPing"[5], как очень простой способ отправить ARP-запрос и проверить ARP-ответ. Это очень полезно, среди прочего:
для проверки сетевого соединения (для хостов, подключенных к локальной сети), даже если на удаленном хосте настроен IP-брандмауэр (другими словами: вы можете ARP-ping локально подключенного хоста Windows, даже если брандмауэр Windows активен);
чтобы получить MAC-адреса хостов-нарушителей, когда такие хосты настроены с одним и тем же IP-адресом (вы отправите ОДИН ARP-запрос и вернемся НЕСКОЛЬКО ARP-ответ);
"Ettercap"[6],"... комплексный набор для атак человека посередине. Он включает в себя обнюхивание живых соединений, фильтрацию контента на лету и множество других интересных трюков. Он поддерживает активное и пассивное рассечение многих протоколов и включает множество функций для анализа сети и хоста ..."
[1] http://en.wikipedia.org/wiki/Broadcast_domain
[2] http://en.wikipedia.org/wiki/Address_Resolution_Protocol
[3] http://en.wikipedia.org/wiki/Address_Resolution_Protocol#ARP_announcements
[4] http://en.wikipedia.org/wiki/ARP_spoofing
Google отсутствует в вашей локальной сети, поэтому вы не можете получить ответ.
Вы должны использовать DNS, чтобы получить ip от адреса, и вы можете его пропинговать.