33

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

3 ответа3

42

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

sudo lsof -i ':80'

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

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

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

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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .