Я на 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 помочь мне диагностировать эту проблему?
lsof
Grep вы использовали бы вернуться пустым; номера портов сопоставляются с/etc/services
именами. Попробуйтеlsof -i | grep http
...-i :port
формат, только если вы grep. Проблема будет в том, чтоlsof
для просмотра процессов других пользователей требуются права доступа root, так что вы должны использоватьsudo lsof -i :80
(и я бы попробовал это безgrep
, просто чтобы убедиться ...)lsof -i :80
, оставаясь подключенным к сеансу Telnet? И кроме попытки http: // localhost / , может быть, что-то введя в этой подсказке Telnet, покажет что-то ...? (Опять же, я знаю: даже если вы поймете это таким образом, это не будет ответом на ваш вопрос ...)Ответы:
Вам нужно выполнить эти команды,
root
чтобы показать процессы других пользователей, например:Mac OS X включает веб-сервер Apache, которым можно управлять с помощью
apachectl
asroot
. Обычно запускается черезlaunchd
соответствующий файл конфигурации/System/Library/LaunchAgents/org.apache.httpd.plist
. Если это не Apache, работающий на 80-м порту, он, вероятно, запущен , реализация Apple менеджера демонов. Согласно Википедии :источник
sudo lsof -i ':80'
может быть возвращено, если только кто-то не запустит это, когда подключен в сеансе Telnet? Но даже без этих команд http: // localhost / , вероятно, все равно показал бы страницу приветствия Apache?sudo apachectl stop
в терминале.sudo lsof -i -P | grep -i "80"
сПросто чтобы прояснить фактический ответ в случае, если пользователи ищут это.
launchd сканирует при
/System/Library/LaunchDaemons/
загрузке и выясняет,org.apache.httpd.plist
что при запуске apache ему нужно перенаправить порт 80 на него.sudo apachectl start
было сделаноОднако в
httpd.conf
файле произошла ошибка, означающая, что apache не был запущен, хотя об этом и не сообщалось с помощьюapachectl
команды.Launchd решил прослушать порт 80, так как думал, что Apache запущен.
Но содержимое любого HTTP-запроса приводило к немедленному закрытию соединения.
sudo lsof -i :80
не дал ответовsudo netstat -an | grep LISTEN
не дал ответов для порта 80Насколько я мог судить, ни в одной диагностической программе, показывающей, что порт 80 используется или прослушивается, не было никакой информации.
исправление httpd.conf в apache и успешный перезапуск apache, чтобы httpd был в таблице ps, что привело к успешному выполнению HTTP-запросов.
Поэтому я ошибался, что я не мог запустить apache, потому что на 80-м порту уже что-то слушало, а не сам apache conf
источник
Я только что столкнулся с этой же проблемой с OSX El Capitan и антивирусом Avast.
sudo lsof -i ':80'
показал соединение с avast.com.Мне пришлось
/Applications/Uninstall Avast.app
sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
чтобы предотвратить использование порта 80.
источник