Я пытаюсь использовать tcpdump для изучения того, что на моем компьютере с кем общается во всемирной паутине.
Я зашел так далеко:
lan_hosts="(хосты || для || исключения)"
local_hosts="(127.0.0.1 || ips_of_my_nics || localhost || local_hostname)"
извините_local_ports="(ssh || https || домен || $(netstat -ap | egrep -h '/(процессы|я_не хочу|хочу|to_see|traffic_of)' | tr -s ' ' | cut -d ' ' -f 4 | rev | cut -d ':' -sf 1 | rev | sort | sed ':a; N; $!ba; s/\n/ \|\| /g'))"
tcpdump -vi any "ip && ! icmp && ! arp && (src ! $local_hosts || dst ! $local_hosts) && (src ! $local_hosts || dst $local_hosts) && (src ! $local_hosts || порт src ! $excused_local_ports) && (dst ! $local_hosts || порт dst ! $excused_local_ports) && host ! $lan_hosts"
Теперь причина, по которой я публикую это здесь как вопрос: я не понимаю, почему/как эти пакеты все еще отображаются в выводе:
tcpdump: прослушивание на любом, тип ссылки LINUX_SLL (Linux Cooked v1), размер захвата 262144 байт
14:49:30.660109 IP (tos 0x0, ttl 64, id 23067, смещение 0, флаги [DF], proto UDP (17), длина 71)
localhost.38976 > localhost.domain: 26002+ [1au] А? lan_host.lan. (43)
14:49:30.686174 IP (tos 0x0, ttl 64, id 23110, смещение 0, флаги [DF], proto UDP (17), длина 80)
localhost.47181 > localhost.domain: 45895+ [1au] PTR? some_ip.in-addr.arpa. (52)
14:49:30.686219 IP (tos 0x0, ttl 64, id 2440, смещение 0, флаги [DF], proto UDP (17), длина 103)
localhost.domain > localhost.47181: 45895 1/0/1 some_ip.in-addr.arpa. Локальный хост PTR. (75)
Я думал, что сегмент (источник ! $local_hosts || dst ! $local_hosts)
моего объявления фильтра, которое только объединяется с логикой && с другими частями фильтра, должно исключать их? И даже если бы у меня не было той части в фильтре, их опять же надо исключить из-за включения домен
в моем извините_local_ports
переменная.
Давайте немного раскроем объявление фильтра и попытаемся объяснить, чего я хотел добиться с помощью каждой части:
IP
-> смотреть только на пакеты ipv4, так как у этой машины нет пути ipv6 к Интернету, меня здесь не интересует ipv6.
! ICMP
-> не заботятся о запросах / ответах ping и других метаданных маршрутизации icmp.
! арп
-> фильтровать пакеты протокола разрешения адресов
(источник ! $local_hosts || dst ! $local_hosts)
-> скрыть пакеты локального хоста, разговаривающего сам с собой
(источник $local_hosts || dst $local_hosts)
-> скрыть трансляции от других хостов
(источник ! $local_hosts || исходный порт ! $excused_local_ports)
-> скрыть пакеты, которые мой хост отправил с одного из портов программ, на которые я не хочу смотреть прямо сейчас.
(dst ! $local_hosts || dst порт ! $excused_local_ports)
-> скрыть пакеты, которые мой хост получил на одном из портов программ, на которые я не хочу смотреть прямо сейчас.
(хост! $lan_hosts)
-> скрыть связь с определенными хостами