Понятия не имею, что прослушивает порт 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 помочь мне диагностировать эту проблему?

Geoff
источник
Не прямой ответ на ваш интересный вопрос, но: что, если вы укажете свой браузер на http: // localhost ?
Арджан
lsofGrep вы использовали бы вернуться пустым; номера портов сопоставляются с /etc/servicesименами. Попробуйте lsof -i | grep http...
Невин Уильямс
1
На самом деле, отображение / etc / services не является проблемой, если вы используете -i :portформат, только если вы grep. Проблема будет в том, что lsofдля просмотра процессов других пользователей требуются права доступа root, так что вы должны использовать sudo lsof -i :80(и я бы попробовал это без grep, просто чтобы убедиться ...)
Гордон Дэвиссон
1
Привет всем, спасибо за предложения до сих пор, но ничего не найдено - даже с правами root и без greps, в списке нет ничего, что фактически прослушивало порт 80.
geoff
Пробовали ли вы lsof -i :80, оставаясь подключенным к сеансу Telnet? И кроме попытки http: // localhost / , может быть, что-то введя в этой подсказке Telnet, покажет что-то ...? (Опять же, я знаю: даже если вы поймете это таким образом, это не будет ответом на ваш вопрос ...)
Арджан

Ответы:

45

Вам нужно выполнить эти команды, rootчтобы показать процессы других пользователей, например:

sudo lsof -i ':80'

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

Когда launchd просматривает списки заданий во время загрузки, он резервирует и прослушивает все порты, запрошенные этими заданиями. Если это указано в листе с помощью клавиши «OnDemand», в данный момент демон фактически не загружается. Скорее, launchd будет прослушивать порт, запускать демона при необходимости и выключать его, когда это не так. После загрузки демона launchd будет отслеживать его и при необходимости следить за тем, чтобы он работал.

Даниэль Бек
источник
Итак, я полагаю, что моя идея была верна, что на самом деле ничего не sudo lsof -i ':80' может быть возвращено, если только кто-то не запустит это, когда подключен в сеансе Telnet? Но даже без этих команд http: // localhost / , вероятно, все равно показал бы страницу приветствия Apache?
Арджан
(Я полагаю, что ваш ответ, вероятно, является решением; он просто не соответствует всем комментариям от ОП.)
Арджан
1
Спасибо за этот блестящий ответ. Теперь мне удалось ее решить: 1. В httpd.conf произошла ошибка, поэтому при запуске sudo apachectl не запускался apache. 2. Но launchd прослушивал порт 80, готовый пересылать запросы на несуществующий сервер. 3. Однако launchd не слушал в общепринятом смысле - то есть - результаты sudo lsof -i: 80 были пустыми, аналогично для netstat 4. Я предполагаю, что launchd совершает какую-то магию, такую ​​как xinetd, в том смысле, что он официально не слушает порт, но каким-то образом удается разрешить соединения с портом путем подкупа ядра.
Джефф
2
Для меня то, что решило проблему, работало sudo apachectl stopв терминале.
MikeiLL
У меня это не сработало, но в этой версии было показано, что работало (ОС High Sierra 10.13.6) sudo lsof -i -P | grep -i "80"с
сайта
7

Просто чтобы прояснить фактический ответ в случае, если пользователи ищут это.

  1. launchd сканирует при /System/Library/LaunchDaemons/загрузке и выясняет, org.apache.httpd.plistчто при запуске apache ему нужно перенаправить порт 80 на него.

  2. sudo apachectl start было сделано

  3. Однако в httpd.confфайле произошла ошибка, означающая, что apache не был запущен, хотя об этом и не сообщалось с помощью apachectlкоманды.

  4. Launchd решил прослушать порт 80, так как думал, что Apache запущен.

  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

Geoff
источник
Так что не так с 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.

spyle
источник