Вам не потрібно нічого встановлювати, щоб отримати справжнє поточне зображення того, з чим спілкується ваш Mac. Кожен інструмент у цій лабораторії постачається з macOS. Жоден із них не вимагає, щоб ви довіряли свій трафік третій стороні, і всі шість разом займають близько десяти хвилин, коли ви знаєте команди. Чого вони не зроблять, і це важливо, так це розкажуть вам, які з цих зв’язків хороші, а які ні — для цього вам все одно потрібен контекст, і в кінці ми будемо чесними щодо того, де ці інструменти зупиняються.
1. lsof — кожне відкрите підключення прямо зараз
В Unix мережевий сокет — це файл, а lsof (список відкритих файлів) містить їх список. Сторінка довідки macOS описує -i як вибір файлів, чия інтернет-адреса відповідає заданій специфікації — без жодного, кожного інтернет-сокета. Додайте -n, щоб пропустити розпізнавання адрес у імена хостів, і -P, щоб пропустити розпізнавання портів у назви служб; обидва роблять команду швидшою, а результат точним, а не приблизним.
sudo lsof -i -n -P
# example output, trimmed to a few representative lines
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Mail 612 alice 9u IPv4 0x... 0t0 TCP 192.168.1.10:54321->17.57.145.13:993 (ESTABLISHED)
Slack 980 alice 22u IPv4 0x... 0t0 TCP 192.168.1.10:54400->35.186.224.25:443 (ESTABLISHED)
mDNSResp 88 root 4u IPv4 0x... 0t0 UDP *:5353Прочитайте його зліва направо: назва процесу та PID, локальна адреса та порт, -> та віддалена адреса та порт, а також стан з’єднання. ESTABLISHED означає активне двостороннє з’єднання прямо зараз. Запустіть без sudo, ви все одно побачите власні процеси; кореневим власникам це потрібно. Про що це не може сказати: lsof – це знімок того моменту, коли ви натиснули Enter. З’єднання, яке відкрилося, надіслало кілька кілобайт і закрило за півсекунди до того, як ви запустили команду, просто не існує — вам потрібно запустити його кілька разів або перейти до наступного інструменту, щоб вловити це.
2. неттоп — той же вид, але живий
nettop є живою версією тієї ж ідеї. На його сторінці довідки описано, що він відображає «список сокетів або маршрутів» із періодично оновлюваною статистикою. -m route перемикає його зі списку сокетів на перегляд таблиці маршрутизації; -m tcp або -m udp обмежують його одним протоколом.
nettop -m route
# interactive; press q to quit, or use -l N to print N samples and exit
# example output, trimmed
time interface state bytes_in bytes_out
23:41:02.123 Mail.612 en0 Established 4.2K 1.1K
23:41:02.123 Slack.980 en0 Established 18.6K 6.4KДодайте -l 5, щоб отримати п’ять зразків і вийти замість проведення інтерактивного сеансу. Це корисно, якщо ви хочете кудись передати вихідні дані. nettop вирішує проблему моментального знімка lsof — ви можете спостерігати за появою з’єднання, передачею даних і закриттям — але він успадковує ту саму межу: ім’я процесу та PID, нічого про те, хто підписав двійковий файл, і відсутність пам’яті після закриття терміналу.
3. потік журналів — те, що сама система говорить про мережу
macOS зберігає уніфікований структурований журнал того, що робить кожен процес, і log stream дозволяє переглядати його в прямому ефірі, відфільтрувавши. Сторінка довідки описує --predicate як фільтрацію записів за допомогою пропозицій у стилі NSPredicate щодо підсистеми, категорії, процесу та вмісту повідомлення.
log stream --predicate 'eventMessage contains "network" or subsystem == "com.apple.network"' --info
# live stream; Ctrl-C to stop. Example line, trimmed:
2026-09-14 23:41:05.001 process=nesessionmanager subsystem=com.apple.network "TCP Connection ... state changed to Ready"Це найменш доступний із шести інструментів — обсяг великий, а синтаксис предиката має криву навчання — але він також єдиний, який відображає зміни стану мережі на системному рівні та події життєвого циклу підключення, коли вони відбуваються, простою англійською мовою з тегами відповідальної підсистеми. Сприймайте це як щось grep, а не читайте рядок за рядком: передайте його через grep для імені процесу, яке вас цікавить, або ключового слова, наприклад "Wi-Fi" або "VPN".
4. scutil --dns і dig — що насправді вирішує ваш Mac
Перед встановленням з’єднання зазвичай виконується пошук DNS. scutil --dns, відповідно до його сторінки довідки, «повідомляє про поточну конфігурацію DNS»: які резолвери налаштовані, які за замовчуванням і які застосовуються лише до певних доменів (розділений DNS, поширений у VPN).
scutil --dns
# example output, trimmed
DNS configuration
resolver #1
nameserver[0] : 192.168.1.1
if_index : 12 (en0)
flags : Request A records, Request AAAA records
reach : 0x00020002 (Reachable,Directly Reachable Address)dig дає пряму відповідь на одне запитання: що означає ця назва прямо зараз. Його довідкова сторінка називає його «гнучким інструментом для опитування серверів імен DNS», який цінується за «гнучкість, простоту використання та ясність результату».
dig example.com +short
# example output
93.184.216.34Жоден інструмент не повідомляє вам, яка програма ініціювала пошук або що сталося після цього — DNS отримує лише адресу, до якої програма збирається (або вже здійснила) підключитися; саме з’єднання – це те, що показує lsof, nettop або журнал брандмауера.
5. tcpdump — основна правда, яка потребує sudo
Усе вище читає стан, який операційна система вже зберігає. tcpdump відрізняється: він фіксує пакети безпосередньо з інтерфейсу, тому його власна документація безпосередньо стосується вимоги — «Читання пакетів із мережевого інтерфейсу може вимагати спеціальних привілеїв» — на практиці sudo у macOS. Використовуйте -i, щоб вибрати інтерфейс, -n, щоб зберегти адреси числовими, і вираз фільтра, наприклад port 53, щоб ізолювати трафік DNS:
sudo tcpdump -i en0 -n port 53
# example output, trimmed
23:41:10.221331 IP 192.168.1.10.54812 > 192.168.1.1.53: 41213+ A? example.com. (30)
23:41:10.244109 IP 192.168.1.1.53 > 192.168.1.10.54812: 41213 1/0/0 A 93.184.216.34 (46)Зразок, на який слід звернути увагу: запит, що надходить на порт 53, негайно повертається відповідь. Якщо ви запустите dig в одному терміналі, а tcpdump — в іншому, ви зможете спостерігати за точним запитом і відповіддю, створеною вашою власною командою — це хороший спосіб повірити тому, що написано на довідкових сторінках, а не приймати їх на віру.
Безкоштовний сьомий інструмент: Монітор активності
У цьому списку варто назвати одну графічну опцію, оскільки не для всіх потрібен термінал. Вкладка «Мережа» Activity Monitor надає вам загальні дані — надіслані й отримані дані для кожного процесу, а також графік продуктивності в реальному часі — це правильна перша зупинка для «щось перебирає пропускну здатність, і я не знаю що». Це також найяскравіша ілюстрація максимальної суми, яку поділяє кожен інструмент у цій статті: він може повідомити вам, що допоміжний процес перемістив два гігабайти за ніч, і в ньому немає стовпця, куди поділися ці два гігабайти. Том і місце призначення — це два різні питання, і macOS відповідає на них двома різними інструментами.
Зібравши десять хвилин разом
sudo lsof -i -n -P— отримати поточний список відкритих сокетів, один прохід, тридцять секунд.nettop -m route -l 5— візьміть кілька живих зразків, щоб зафіксувати все, що пропустив lsof.scutil --dns— підтвердьте, який резолвер ви насправді використовуєте, особливо якщо ви використовуєте VPN або публічну Wi-Fi.dig <name> +short, на будь-чому незнайомому з кроку 1, щоб побачити, що це наразі вирішує.sudo tcpdump -i en0 -n port 53, протягом шістдесяти секунд, щоб спостерігати за трафіком DNS у необробленому вигляді, коли додатки займаються своїми справами.log stream --predicateз ключовим словом grep, якщо щось вище викликало запитання, на яке попередні п’ять не дали відповіді.
Спрацьований приклад
Скажімо, крок 1 відкриває процес під назвою helperd, який утримує відкрите з’єднання з адресою, яку ви не впізнаєте. Не зупиняйтеся на досягнутому. Запустіть dig -x <the address> для зворотного пошуку — він не завжди виводить щось читабельне, але коли це відбувається, ім’я хоста, як-от ads.example-cdn.net, скаже вам більше за п’ять секунд, ніж необроблена IP-адреса. Запустіть nettop -m tcp -l 3 і подивіться, чи те саме з’єднання все ще відкрито через кілька секунд і чи насправді переміщуються через нього байти, чи воно простоює. Якщо він неактивний і знову відкривається через фіксований проміжок часу, це форма періодичної перевірки, а не одноразового перенесення — варто пам’ятати, не варто автоматично хвилюватися, оскільки звичайні засоби перевірки оновлень поводяться так само. Потім перевірте scutil --dns, щоб підтвердити, що резолвер, який створив будь-яку адресу helperd, підключену до неї, був тією, яку ви очікували, особливо якщо ви перебуваєте в чужій мережі Wi-Fi. П’ять команд, один процес, і ви перейшли від «я цього не впізнаю» до «ось конкретно те, що я знаю і чого не знаю про це» — що є справжньою метою такого аудиту, а не вердиктом «добре» чи «погано».
Про що вам не скаже жоден із цих інструментів
Пройдіть усі шість, і у вас залишиться три справжні прогалини. По-перше, ідентичність за межами назви процесу: тут ніщо не перевіряє, чи є двійковий файл під назвою «Пошта» поштою Apple чи чимось, що перейменував себе, або чи він узагалі підписаний — це окремий пошук за допомогою codesign та spctl. По-друге, пам’ять: як тільки вікно терміналу закривається, закривається все, що ви вивчили; немає журналу «до чого підключився мій Mac минулого вівторка», якщо ви не створите його самостійно. По-третє, судження: жоден із цих інструментів не має думки про те, чи очікується з’єднання. Програма для створення нотаток, яка підключається до адреси, яку вона ніколи раніше не використовувала, виглядає в lsof точно так само, як і програма, яка підключається до свого звичайного сервера синхронізації — розпізнавання шаблонів — це розпізнавання шаблонів, яке ви повинні використати самі, або інструмент, який потрібно взяти за вас.
Яке місце тут посідають FireAI та HisnLabs
Everything in this lab is free and built into macOS, and none of it names the process behind a connection or remembers it after the terminal closes — which is the specific, narrow gap FireAI’s per-app rules and connection history are built to close.
FireAI — це власний продукт HisnLabs: ШІ-фаєрвол, який працює безпосередньо на вашому Mac. Він показує простою мовою кожне з’єднання, яке встановлюють ваші застосунки, і дає вам вирішувати, що покидає ваш Mac, — його ШІ працює локально, тож ваш трафік ніколи не надсилається ні нам, ні будь-кому іншому. Команда дослідників безпеки HisnLabs — саме вона підтримує точність цих рішень: каталогізує, які домени є звичайною телеметрією, а які — справжнім сервісом, відстежує країну та мережу за з’єднанням і навчає локальну модель (функцію Autopilot) на реальних шаблонах трафіку — і нічого з цього не покидає ваш Mac.
Ви можете почитати про технічні рішення, що лежать в його основі, або спробувати FireAI протягом 17 днів на сторінці FireAI від HisnLabs.
