Поняття не має, що слухає порт 80 в OS X


34

Я на OSX Mountain Lion 10.8.3, і я перезавантажив свій Mac.

Я хочу запустити послугу (наприклад, Apache на порт 80), але з портом 80 вже щось відбувається:

telnet localhost 80

Trying ::1...
Connected to localhost.
Escape character is '^]'.

Зачекайте, я чую, як ви говорите, ви можете знайти це за допомогою lsof або netstat. За винятком нічого немає

netstat -an | grep LISTEN | grep '\.80'

*comes back blank*

lsof -i :80 | grep LISTEN

*comes back blank

Отже, з того, що я знаю про системи Unix, я вважаю, що це повинно бути правилом переадресації пакетів? Тобто пакети передаються з вхідного порту 80 на щось інше, що слухається в цій службі.

ipfw show

65535 0 0 allow ip from any to any

Хм, нічого незвичайного там немає

pfctl -s nat

No ALTQ support in kernel
ALTQ related functions disabled

Нічого незвичайного там немає

Моє питання: як я можу відобразити будь-які правила переадресації пакетів ... У Linux я можу просто робити iptables -L -t NAT, або iptables -L. Або, будь-який експерт з OSX, може допомогти мені діагностувати цю проблему?


Не пряма відповідь на ваше цікаве запитання, але: що робити, якщо ви вкажете браузер на http: // localhost ?
Ар'ян

lsofGrep ви використовували б повернутися порожнім; Номери портів відображаються на /etc/servicesімена. Спробуйте lsof -i | grep http...
Невін Вільямс

1
Насправді, картографування / etc / services не є проблемою, якщо ви використовуєте -i :portформат, лише якщо ви натискаєте. Проблема полягає в тому, що lsofпотрібні кореневі приватні приватні файли, щоб побачити процеси інших користувачів, тому вам слід скористатися sudo lsof -i :80(і я б спробував це без того grep, щоб переконатися ...)
Гордон Девіссон

1
Привіт усім, дякую за пропозиції досі, але нічого не з'явилося - навіть як root, і без грепів, нічого не вказано, як насправді слухати порт 80.
geoff

Чи намагалися ви lsof -i :80ще підключитися під час сеансу Telnet? І окрім спроби http: // localhost / , можливо, набравши щось у цьому запиті Telnet, щось виявляє ...? (Знову ж таки, я знаю: навіть якщо ви так зрозумієте, це не буде відповіддю на ваше запитання ...)
Арджан

Відповіді:


45

Ці команди потрібно виконати, rootщоб показати процеси інших користувачів, наприклад:

sudo lsof -i ':80'

Mac OS X включає в себе веб - сервер Apache , який може управлятися з допомогою , apachectlяк root. Зазвичай починається через launchd, відповідний файл конфігурації /System/Library/LaunchAgents/org.apache.httpd.plist. Якщо це не цей Apache, що працює на порту 80, він, ймовірно, запущений , реалізацією Apple, менеджера демонів. За даними Вікіпедії :

Під час запуску сканування через списки завдань під час завантаження він резервує і прослуховує всі порти, про які вимагає ці завдання. Якщо це вказано в плісті клавішею "OnDemand", демон на даний момент фактично не завантажується. Скоріше, запуск буде слухати в порту, запускати демон, коли це потрібно, і закривати його, коли його немає. Після завантаження демона, startd буде відслідковувати його та переконайтесь, що він працює, якщо це необхідно.


Тож я гадаю, що моя ідея була правильною, що насправді нічого не sudo lsof -i ':80' може повернути, якщо тільки хтось не запустить це під час з'єднання в сесії Telnet? Але навіть без цих команд http: // localhost / напевно, все-таки показав би якусь вітальну сторінку Apache?
Ар’ян

(Я вважаю, що ваша відповідь, мабуть, є рішенням; вона просто не відповідає всім коментарям з ОП.)
Ар'ян,

1
Дякую за цю блискучу відповідь. Зараз мені вдалося це вирішити: 1. У httpd.conf сталася помилка, тому sudo apachectl start не запускав апаш. 2. Але запускав прослуховування на порту 80, готовий пересилати запити на неіснуючий сервер. 3. Однак запуск не слухав у загальноприйнятому сенсі - тобто - результати sudo lsof -i: 80 був порожнім, аналогічно і для netstat 4. Я думаю, що запускає робить якусь магію, як xinetd, тому що він офіційно не слухає порт, але якимось чином вдається дозволити з'єднання до порту шляхом підкупу ядра.
геоф

2
Для мене те, що вирішило проблему, працює sudo apachectl stopв терміналі.
MikeiLL

Це не працює для мене, але ця версія так і показати те , що працює (OS High Sierra 10.13.6) sudo lsof -i -P | grep -i "80"від superuser.com/questions/984919 / ...
RoboBear

7

Просто, щоб зрозуміти фактичну відповідь у випадку, якщо користувачі шукають цього.

  1. startd сканує /System/Library/LaunchDaemons/завантаження і виходить з org.apache.httpd.plistцього, коли апарат запущений, йому потрібно переслати порт 80 на нього.

  2. sudo apachectl start було зроблено

  3. Однак у httpd.confфайлі сталася помилка, тобто апарат не запускався, хоча про це не повідомлялося через apachectlкоманду.

  4. Лаунд вирішив прослухати порт 80, коли думав, що апач піднявся.

  5. Але вміст будь-якого запиту HTTP призвів до негайного припинення з'єднання.

  6. sudo lsof -i :80 відповіді не дав

  7. sudo netstat -an | grep LISTEN не дав відповідей на порт 80

  8. не було інформації, наскільки я міг сказати, в будь-яких інструментах діагностики, які б показали, що порт 80 використовується або прослуховується.

  9. виправити httpd.conf apache і перезапустити apache успішно, щоб httpd опинився в таблиці PS, що призвело до успішного запиту HTTP.

  10. Тому я помилявся, що не міг запустити apache, тому що вже було щось прослуховування на порту 80, а не apache conf сам був причиною


То що було з httpd.conf? У мене зараз ця проблема, і я не впевнений, як діяти на основі вашої відповіді тут .. ??
Дрю Енджелл

0

Я щойно зіткнувся з цією ж проблемою із антивірусом OSX El Capitan та Avast. sudo lsof -i ':80'показав зв’язок з avast.com.

me@destop ~|master$ sudo lsof -i ':80'
Password:
COMMAND    PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
com.avast 7964 root   58u  IPv4 0xc4c1bba31fcc2c7f      0t0  TCP 192.168.100.111:52381->mia04-004.ff.avast.com:http (ESTABLISHED)

мені довелося

  1. видаліть Avast за допомогою /Applications/Uninstall Avast.app
  2. sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
  3. перезапустити

щоб не допустити використання порту 80.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.