Вопрос или проблема
Я пытаюсь отфильтровать IP-адрес моего локального компьютера 192.168.5.22
.
Я использовал ip.src != 192.168.5.22|| ip.dst !=192.168.5.22
, но мой адрес все равно появляется.
Ответ Митча с предложением &&
является правильным. С отрицательным совпадением, как у вас, нужно, чтобы оба условия были истинными, чтобы отфильтровать ваш IP, таким образом and вместо or. Вы также можете написать это так:
not (ip.addr == 192.168.5.22)
Может показаться более логичным написать это как ip.addr != 192.168.5.22
, но хотя это и является допустимым выражением, оно будет соответствовать другому концу соединения, который не является конкретным IP, и по-прежнему будет истинным. Например, при подключении к 192.168.5.254 с 192.168.5.22, ip.addr != 192.168.5.22
не соответствует *.22 IP, он соответствует *.254 и, следовательно, пакет соответствует выражению фильтра. Вот полный пример для фильтрации HTTP:
not ip.addr == 192.168.5.22 and not tcp.dstport == 80
tcp.dstport != 80 страдает от похожей проблемы; использование tcp.dstport != 80 оказывается значением “соответствие ТОЛЬКО TCP-трафику, но только TCP, который НЕ равен dstport == 80”
Хотя это не строго ваш вопрос, я предпочитаю делать фильтрацию в фильтре захвата (двойной клик по имени интерфейса в диалоге настроек захвата), чей синтаксис аналогичен tcpdump. Это снижает потребление памяти и диска, избегая захвата пакетов, которые вы игнорируете. Минус в том, что эти пакеты не захватываются, если позже вы захотите их изучить, и вы не можете изменить фильтр, выбранный таким образом, во время сессии захвата. Например, чтобы избежать захвата HTTP и SSH трафика к/от любого хоста и любых пакетов к или от 192.168.5.22,
not host 192.168.5.22 and not port 80 and not port 22
Если вы хотите отфильтровать HTTP-трафик только к и от этого хоста, вы могли бы сделать это так:
not (host 192.168.5.22 and port 80)
Ваш or
должен быть and
ip.src != 1.2.3.4 && ip.dst != 1.2.3.4
Сейчас 2022 год, и IPv6 теперь актуален! IPv6 усложняет это, так как у вас обычно есть несколько IPv6 адресов, и они часто меняются. Перечисление каждого из них является трудоемким. Вместо этого мы знаем, что локальный IPv6 префикс – это FE80::/10
, поэтому для исключения трафика, который формируется и адресован в этот диапазон, используем этот фильтр:
not (ipv6.dst == fe80::/10 and ipv6.src == fe80::/10))
Объединяя все это вместе, этот фильтр исключает локальный IP, IPv6 и широковещательные/мультирепликированные пакеты:
not (ipv6.dst == fe80::/10 and ipv6.src == fe80::/10) and
not (ip.dst == 192.168.0.0/16 and ip.src == 192.168.0.0/16) and
not (ip.dst == 10.0.0.0/8 and ip.src==10.0.0.0/8) and
not (eth.dst[0] & 1)
Учтите, что вышеуказанный фильтр только исключает локальный IP-трафик в 192.168.* и 10.* диапазоне IP. Возможно, вы используете другие локальные диапазоны. and not (eth.dst[0] & 1)
исключает любой пакет с установленным битом мультикаста ethernet. Если вы хотите видеть мультикаст-трафик, просто исключите его. (возможно, также лучше просто исключить мультикаст-протоколы, такие как not mdns
)
Ответ или решение
Для исключения отображения локального IP-адреса в логах Wireshark важно корректно настроить фильтры отображения. В вашем случае задача состоит в фильтрации пакетов, связанных с IP-адресом вашей локальной машины, которая имеет адрес 192.168.5.22
. Ниже мы рассмотрим концепции и практические примеры, которые помогут вам настроить фильтрацию.
Теория
Wireshark предлагает два типа фильтров: фильтры захвата и фильтры отображения. Фильтры захвата применяются ко всем данным, которые перехватывает Wireshark, и на основе этих фильтров решается, какие данные сохранять в лог. Фильтры отображения применяются к уже захваченным данным для выбора, что отображать пользователю.
В вашем случае настроен неверный логический оператор. Вы использовали конструкцию ip.src != 192.168.5.22 || ip.dst != 192.168.5.22
, предполагая, что это исключит любой трафик, где ваш IP-адрес либо отправитель, либо получатель. Однако логическое ИЛИ (OR) приводит к тому, что разные условия удовлетворяются и при наличии пакетов, где ваш IP попадает в одно из условий, пакет все равно включается в отображение.
Пример
Правильное фильтрование должно применяться через логическое И (AND). Можно установить фильтр в формате:
ip.src != 192.168.5.22 && ip.dst != 192.168.5.22
Это говорит системе, что только те пакеты, которые одновременно не имеют вашего IP-адреса ни в качестве источника, ни в качестве назначения, будут выводиться в интерфейс Wireshark. Это базовый пример фильтрации по эксклюзивному IP-адресу.
Однако удобней и более безопасно использовать следующий фильтр:
not (ip.addr == 192.168.5.22)
Этот фильтр расскажет Wireshark исключить все пакеты, где 192.168.5.22
фигурирует либо в качестве отправителя, либо в качестве получателя. Данный метод подтвердился своей надежностью на практике.
Применение
Если вы хотите расширить фильтрацию, включая исключение TCP или других протоколов, или специфических портов, расширяя функционал фильтрации, используйте такие подходы:
-
Исключение трафика на определенных портах (например, HTTP):
not (ip.addr == 192.168.5.22) and not (tcp.dstport == 80)
Этот фильтр исключает пакеты, отфильтрованные по вашему IP-адресу или по назначенному порту 80.
-
Фильтрация IPv6-трафика:
IPv6-адресация добавляет сложности, поскольку устройства могут иметь несколько IPv6-адресов, которые часто меняются. Для исключения локального IPv6-трафика можно использовать:
not (ipv6.dst == fe80::/10 and ipv6.src == fe80::/10)
Здесь
fe80::/10
представляет блок link-local адресов, часто используемых в локальных сетях. -
Фильтрация multicast-трафика:
Часто в сетях критично исключить мультикаст-пакеты:
not (eth.dst[0] & 1)
Это исключает пакеты, у которых установлен бит ethernet multicast.
-
Используйте захватные фильтры для оптимизации:
Захватные фильтры ведут к экономии ресурсов за счет исключения ненужных данных еще на этапе захвата. Пример фильтра может выглядеть следующим образом:
not host 192.168.5.22 and not port 80 and not port 22
Эти фильтры помогают настроить захватные параметры так, чтобы определенные пакеты в логи вообще не попадали. Помните, что изменять такие фильтры во время захвата невозможно.
Заключение
Использование правильных фильтров в Wireshark требует осознания различий между логическим "и" и "или". Это соответствует необходимости четкого формирования логических выражений. Применяйте правильные фильтры, которые позволят увеличивать эффективность анализа сетевого трафика и, что более критично, эффективно управлять локальными IP-адресами.