Linux где хранится arp таблица
Аргумент hostname может быть как именем, так и IP адресом в стандарте dotted quad.
Первая строка отображает ARP-запись для IP-адреса, указанного хоста или всех известный хостов, если hostname не задается. Например, вызов arp на vlager может выдать:Это показывает Ethernet-адреса vlager , vstout и vale .
При использовании опции -t Вы увидите информацию только о том типе аппаратных средств, который укажете. Это могут быть: ether , ax25 или pronet для Ethernet 10Mbps, AMPR AX.25 и IEEE 802.5 token ring, соответственно.
Опция -s используется, чтобы добавить Ethernet-адрес хоста к ARP-таблицам. Аргумент hwaddr определяет адрес аппаратных средств, который по умолчанию предполагается Ethernet-адресом, указанным как шесть шестнадцатиричных байт, разделяемых двоеточиями. Вы можете также устанавливать адреса для других типов аппаратных средств, используя опцию -t .
Одна из проблем, которая может потребовать, чтобы Вы вручную добавили IP-адрес к ARP-таблице, это когда по некоторым причинам ARP-запросы для удаленного хоста не доходят, например, когда есть сбой ARP-драйвера, или имеется другой хост в сети, который ошибочно опознает себя с IP-адресом другого хоста. Твердая установка IP-адреса в ARP-таблице также является мерой защиты себя от хостов в Вашем Ethernet, которые прикидываются кем-то другим.
Вызов arp с использованием ключа -d удаляет все ARP-записи, касающиеся данного хоста. Это может быть необходимо, чтобы вынудить интерфейс повторно получить Ethernet-адрес для данного IP. Это полезно, когда переконфигурированная система имеет неправильную ARP-информацию.
Опция -s может также использоваться, чтобы создать proxy ARP. Это специальная техника когда хост, скажем, gate действует как gateway для другого хоста, назовем его fnord , делая вид, что оба адреса относятся к тому же самому хосту, а именно, gate . Это делается так: на gate создается ARP-запись о fnord , которая указывает на его собственный Ethernet-интерфейс. Теперь, когда хост посылает ARP-запрос о fnord , gate будет возвращать ответ, содержащий собственный Ethernet-адрес. Спрашивающий хост будет посылать все пакеты gate , который перенаправит их к fnord .
Эта схема может быть необходима, например, когда Вы хотите работать с fnord с DOS-машины с нестандартным TCP, которое плохо работает с маршрутизацией. Когда Вы используете proxy ARP, DOS-машине будет казаться, что fnord находится в локальной подсети, так что ей не требуется что-либо знать относительно маршрутов и gateway.
Другое очень полезное применение proxy ARP, когда один из Ваших хостов действует как gateway к некоторому другому хосту только временно, например, по телефону. В предыдущем примере мы уже столкнулись с laptop vlite , который был связан с vlager через PLIP-связь только в небольшом промежутке времени. Конечно, это будет работать только, если адрес хоста, для которого Вы хотите обеспечить proxy ARP, находится в той же самой IP-подсети, что и Ваш gateway. Например, vstout мог бы быть proxy ARP для любого хоста из подсети Brewery ( 172.16.1.0 ), но не для хоста из подсети Winery ( 172.16.2.0 ).
Требуемые действия для обеспечения proxy ARP для fnord приведены ниже. Конечно, Ethernet-адрес должен быть от gate :
Доброго времени суток, дорогие хабраюзеры. Этой статьей я хочу начать цикл повествования о протоколах, которые помогают нам прозрачно, быстро и надежно обмениваться информацией. И начать с протокола ARP.
Как известно, адресация в сети Internet представляет собой 32-битовую последовательность 0 и 1, называющихся IP-адресами. Но непосредственно связь между двумя устройствами в сети осуществляется по адресам канального уровня (MAC-адресам).
Так вот, для определения соответствия между логическим адресом сетевого уровня (IP) и физическим адресом устройства (MAC) используется описанный в RFC 826 протокол ARP (Address Resolution Protocol, протокол разрешения адресов).
ARP состоит из двух частей. Первая – определяет физический адрес при посылке пакета, вторая – отвечает на запросы других станций.
Протокол имеет буферную память (ARP-таблицу), в которой хранятся пары адресов (IP-адрес, MAC-адрес) с целью уменьшения количества посылаемых запросов, следовательно, экономии трафика и ресурсов.
Пример ARP-таблицы.
192.168.1.1 08:10:29:00:2F:C3
192.168.1.2 08:30:39:00:2F:C4
Слева – IP-адреса, справа – MAC-адреса.
Прежде, чем подключиться к одному из устройств, IP-протокол проверяет, есть ли в его ARP-таблице запись о соответствующем устройстве. Если такая запись имеется, то происходит непосредственно подключение и передача пакетов. Если же нет, то посылается широковещательный ARP-запрос, который выясняет, какому из устройств принадлежит IP-адрес. Идентифицировав себя, устройство посылает в ответ свой MAC-адрес, а в ARP-таблицу отправителя заносится соответствующая запись.
Записи ARP-таблицы бывают двух вид видов: статические и динамические. Статические добавляются самим пользователем, динамические же – создаются и удаляются автоматически. При этом в ARP-таблице всегда хранится широковещательный физический адрес FF:FF:FF:FF:FF:FF (в Linux и Windows).
Создать запись в ARP-таблице просто (через командную строку):
arp –s <IP-адрес> <MAC-адрес>
Вывести записи ARP-таблицы:
После добавления записи в таблицу ей присваивается таймер. При этом, если запись не используется первые 2 минуты, то удаляется, а если используется, то время ее жизни продлевается еще на 2 минуты, при этом максимально – 10 минут для Windows и Linux (FreeBSD – 20 минут, Cisco IOS – 4 часа), после чего производится новый широковещательный ARP-запрос.
- тип сети (16 бит): для Ethernet – 1;
- тип протокола (16 бит): h0800 для IP;
- длина аппаратного адреса (8 бит);
- длина сетевого адреса (8 бит);
- тип операции (16 бит): 1 – запрос, 2 — ответ;
- аппаратный адрес отправителя (переменная длина);
- сетевой адрес отправителя (переменная длина);
- аппаратный адрес получателя (переменная длина);
- сетевой адрес получателя (переменная длина).
А вот как происходит определение маршрута с участием протокола ARP.
Пусть отправитель A и получатель B имеют свои адреса с указанием маски подсети.
- Если адреса находятся в одной подсети, то вызывается протокол ARP и определяется физический адрес получателя, после чего IP-пакет инкапсулируется в кадр канального уровня и отправляется по указанному физическому адресу, соответствующему IP-адресу назначения.
- Если нет – начинается просмотр таблицы в поисках прямого маршрута.
- Если маршрут найден, то вызывается протокол ARP и определяется физический адрес соответствующего маршрутизатора, после чего пакет инкапсулируется в кадр канального уровня и отправляется по указанному физическому адресу.
- В противном случае, вызывается протокол ARP и определяется физический адрес маршрутизатора по умолчанию, после чего пакет инкапсулируется в кадр канального уровня и отправляется по указанному физическому адресу.
Главным достоинством проткола ARP является его простота, что порождает в себе и главный его недостаток – абсолютную незащищенность, так как протокол не проверяет подлинность пакетов, и, в результате, можно осуществить подмену записей в ARP-таблице (материал для отдельной статьи), вклинившись между отправителем и получателем.
Бороться с этим недостатком можно, вручную вбивая записи в ARP-таблицу, что добавляет много рутинной работы как при формировании таблицы, так и последующем ее сопровождении в ходе модификации сети.
Существуют еще протоколы InARP (Inverse ARP), который выполняет обратную функцую: по заданному физическому адресу ищется логический получателя, и RARP (Reverse ARP), который схож с InARP, только он ищет логический адрес отправителя.
В целом, протокол ARP универсален для любых сетей, но используется только в IP и широковещательных (Ethernet, WiFi, WiMax и т.д.) сетях, как наиболее широко распространенных, что делает его незаменимым при поиске соответствий между логическими и физическими адресами.
Иногда возникает необходимость узнать какие устройства подключены к локальной сети Linux. Это может понадобиться если вы хотите подключиться к одному из компьютеров и не помните его адрес или хотите убедиться в безопасности вашей сети и найти все скрытые устройства.
Самый надежный способ обнаружить все подключенные к сети Linux устройства, в том числе и скрытые - это ARP сканирование локальной сети. В этой статье мы рассмотрим как его выполнить и какие утилиты для этого нужны.
Как выполнить ARP сканирование локальной сети?
Как вы знаете, у всех компьютеров в сети есть IP адреса. Никогда не задавались вопросом, как сеть определяет, какому компьютеру принадлежит тот или иной адрес? Ведь сети бывают разные, проводные, беспроводные, ppp и т д. И в каждой из этих сетей аппаратный адрес компьютера имеет свой формат, зависящий от конструктивных особенностей сети, а IP адреса одни и те же.
Все очень просто. Для преобразования физических адресов, в ip адреса используется протокол ARP (Address Resolution Protocol), так и расшифровывается - протокол разрешения адресов. Когда компьютеру нужно обратиться к другому компьютеру в локальной сети, он отправляет специальный запрос в котором буквально спрашивает "У кого IP адрес 192.168.1.4", компьютер с таким ip адресом отправляет ответ "У меня, я 11:22:33:44:55", в ответе он передает свой физический адрес в этой сети. Дальше этот адрес заносится в специальную таблицу. но это уже тонкости реализации и они выходят за рамки нашей статьи. Сегодня мы поговорим как самому выполнить ARP сканирование локальной сети linux и найти все подключенные устройства.
Утилита ARP Scan
ARP Scan или еще называемый MAC Scanner - это очень быстрый инструмент для сканирования локальной сети Linux с помощью ARP. Утилита показывает все IPv4 адреса устройств в вашей сети. Поскольку ARP не использует маршрутизацию, то такой вид сканирования работает только в локальной сети.
ARP Scan находит все активные устройства, даже если у них включен брандмауэр. Компьютеры не могут скрыться от ARP также как они скрываются от ping. Но ARP сканирование не подходит для поиска компьютеров за пределами локальной сети, в таких ситуациях используйте ping сканирование.
Установка ARP Scan
Этот arp сканер сети доступен для следующих операционных систем:
- Debian, поставляется по умолчанию;
- Ubuntu, можно установить с репозитория Universe;
- Fedora, официальные репозитории начиная с версии 6;
- RedHat - доступна начиная с версии 5;
- Gentoo, официальные репозитории;
- ArchLinux - официальные репозитории Pacman.
Для установки в Ubuntu выполните:
sudo apt install arp-scan
Сканирование сети
ARP Scan позволяет находить активные компьютеры как в проводных сетях ethernet, так и в беспроводных Wifi сетях. Также есть возможность работать с Token Ring и FDDI. Не поддерживаются последовательные соединения PPP и SLIP, поскольку в них не используется ARP. Программу нужно запускать с правами суперпользователя.
Но сначала надо узнать сетевой интерфейс, который используется для подключения к сети. Для этого можно воспользоваться программой ip:
В данном случае, это enp24s0. Самый простой способ выполнить ARP сканирование и обнаружить все подключенные к локальной сети компьютеры - запустить программу со следующими параметрами:
sudo arp-scan --interface=enp24s0 --localnet
Здесь параметр --interface, задает интерфейс для сканирования, а --localnet, говорит, что нужно использовать все возможные IP адреса для текущей сети.
Первый параметр можно опустить, тогда программа будет искать все узлы для интерфейса с меньшим номером в системе. В нашем примере имя интерфейса - enp24s0.
Вместо параметра --localnet, можно указать маску сети:
sudo arp-scan --interface=enp24s0 10.0.1.0/24
ARP сканирование можно использовать, даже если у вашего интерфейса нет IP адреса. Тогда в качестве исходящего адреса будет использован 0.0.0.0. Правда, на такие запросы могут ответить не все системы. Тогда ARP сканер сети не так эффективен.
ARP спуфинг и ARP прокси
Выводы
ARP Scan это простой, но очень мощный инструмент, с помощью которого можно выполнять сканирование ip адресов в локальной сети linux. Те, кто знаком с Cisco маршрутизаторами и коммутаторами, знают что найти такие устройства можно только с помощью ARP. Это полезный инструмент, возможно, когда-то вам он пригодится.
--- 192.168.1.5 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 3.539/3.539/3.539/0.000 ms
В это время "за кулисами":
$ sudo tcpdump -ennqti eth1 arp or icmp
00:0c:29:36:c4:e3 > ff:ff:ff:ff:ff:ff, ARP, length 60: Request who-has 192.168.1.5 tell 192.168.1.11, length 46
00:0c:29:1d:5c:e4 > 00:0c:29:36:c4:e3, ARP, length 42: Reply 192.168.1.5 is-at 00:0c:29:1d:5c:e4, length 28
00:0c:29:36:c4:e3 > 00:0c:29:1d:5c:e4, IPv4, length 98: 192.168.1.11 > 192.168.1.5: ICMP echo request, id 19794, seq 1, length 64
00:0c:29:1d:5c:e4 > 00:0c:29:36:c4:e3, IPv4, length 98: 192.168.1.5 > 192.168.1.11: ICMP echo reply, id 19794, seq 1, length 64
ARP cache
Если просто, то к эш ARP - это сохраненное сопоставление IP-адреса с адресом канального уровня. Основное назначение - не производить повторно ARP - запросы (ответы) при каждом обмене IP-па кетами. Недостатком является то, что каждый хост поддерживает свой собственный ARP- кэш, который может устаревать, когда некоторый узе л был и зменен, ил и некоторый IP-ад рес был прис воен другому хосту.Кэш ARP также известен как таблица соседей ( neighbor table).
Просмотреть содержимое кэша ARP Linux можно с помощью:
$ sudo arp -i eth1
Address HWtype HWaddress Flags Mask Iface
192.168.1.11 ether 00:0c:29:36:c4:e3 C eth1
$ sudo ip neigh sh dev eth1
192.168.1.11 lladdr 00:0c:29:36:c4:e3 STALE
$ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.1.11 0x1 0x2 00:0c:29:36:c4:e3 * eth1
Записи в кэше ARP периодически и автоматически проверяются , если долгое время не используются . Параметр net/ipv4/neigh/$DEV/gc_stale_time (есть много других параметров в net/ipv4/neigh/$DEV) определяет время, по ист ечению которого зап ись в кэше становится устаревшей .
$ sudo sysctl net.ipv4.neigh.default.gc_stale_time
net.ipv4.neigh.default.gc_stale_time = 60
Возможные состояния записи в к эше ARP :
Состояние з аписи | Значение |
---|---|
permanent | никогда не устаревает и не проверяется |
noarp | устаревает, но не проверяется |
reachable | нормально устаревает |
stale | продолжает использоваться, нужна проверка |
delay | планируется ARP-запрос, нужна проверка |
probe | отправка ARP-запрроса |
incomplete | первый ARP-запрос отправлен |
failed | не получен ответ на ARP-запрос |
Как прои с ходит смена состояния записи в ARP-кэше (хост А хранит запись в своем кэше о хосте В) :
- до того момента, пока ист ечет срок хранения записи в к эше, но по сл е того, как узел В отключится от с ети - узел А продолжает о тс ылать Ethernet -ф реймы с назначением "MAC -адрес хоста В "
- запись о хосте В считается достоверной в течении времени gc_stale_time , по и с т ечению которого состояни е записи становится s tale
- замет ив в таблице запись в с остоянии stale, я дро иници ирует про верку записи ARP-запросом в направлении IP- адреса хоста В
- для прове рки ядро сначала отправит ucast_solicit -фреймы до последнего известного адреса хоста В . Если этот ва р и ант не поможет, то ядро отправит ш ироковещательный mcast_solicit-фрейм, прежде чем изменить состояние записи в кэше . П осле того, как все по пыт ки прове рки записи закончатся неудачей, записи присвоится состояние incomplete.
Если после опреде л енного числа m cast_solicit ARP-запрос ов проверка не удалась, то запись переходит в состояние failed.
ARP suppresion
Полное подавление ARP осуществляется легко - для этого достаточно установить флаг noarp при настройке интерфейса. После это потребуется статическая ARP-таблица.Отключение ARP:
[440]:
$ sudo ip link set eth1 arp off
[441]:
$ sudo ifconfig eth1 -arp
ARP Flux problem
Когда Linux-хост подключен к сегменту сети с помощью нескольких сетевых карт, может возникнуть проблема соответствия IP-адресов адресам канального уровня, т.к. машина может ответить на запросы ARP от обоих интерфейсов Ethernet. Эта проблема более известна как ARP Flux.С ядра версии 2.4 решение проблемы - включение параметра arp_filter
с помощью sysctl:
[442]:
$ sudo sysctl net.ipv4.conf.all.arp_filter
net.ipv4.conf.all.arp_filter = 0
C помощью оболочки можно включить фильтрацию сразу на всех интерфейсах:
Proxy ARP
ARP-прокси позволяет маршрутизатору отвечать на ARP запросы в одну сеть, в то время как запрашиваемый хост находится в другой сети. С помощью этого средства происходит "обман" отправителя, который отправил ARP запрос, после чего он "думает", что маршрутизатор является хостом назначения, тогда как в действительности хост назначения находится по другую сторону маршрутизатора. Маршрутизатор выступает в роли уполномоченного агента хоста назначения, перекладывая пакеты от другого хоста.
Регулируется параметром proc/sys/net/ipv4/conf/DEV/proxy_arp. Значение по-умолчанию -- 0 (выключено).
2 Убунты на виртуалках, пингую с одной на другую, сразу после этого пишу arp -a. А он мне выводит всего одну строчку с ip адресом компа, с которого проводилось пингование. Я могу ошибаться, конечно, ибо не знаю точно, какая информация должна храниться в этом кэше, но там уж явно должно что-то быть полезное.. Что же делать?
А что именно ты там хочешь увидеть кроме айпишника, мака и интерфейса?
То есть так все и должно быть? А почему тогда запись в кэше почему-то одна всегда? Попинговал я другой комп раза 3-4, еще и себя попинговал для очистки совести - а запись все равно одна, причем одна и та же..
Запусти
nmap 192.168.1.0/24
Или какая у тебя сетка с маской.
И потом уже
arp -a
Сколько будет записей?
Хм, а нет ли другого способа проверить? Виртуалка свежая, nmap не установлен, а установить не получится - ибо айпишник менял по своему усмотрению, чтобы 2 виртуалки были в одной подсети. Поэтому не получается таким образом посмотреть кэш..
>2 Убунты на виртуалках, пингую с одной на другую, сразу после этого пишу arp -a.
А кто сказал, что после пинга другой машины, появится запись в arp-кэше? о_О
Mr_Alone
А кто сказал, что после пинга другой машины, появится запись в arp-кэше? о_О
а кто сказал другое?
Понимаш, arp это морально низкий протокол, ниже почти некуда, так вот мак адрес, это адрес ближайшего к тебе свича\роутера\итп в вируталке соответственно - виртуальный интерфейс хоста, то бишь если там у тебя будет два то это уже ой, хотя может там можно както настроить это, но обычно у тебя хост эмулирует nat и все как я описал.
Читайте также: