Korzystam z systemu OSX Mountain Lion 10.8.3 i niedawno zrestartowałem komputer Mac.
Chcę uruchomić usługę (jak Apache na porcie 80), ale już coś się dzieje z portem 80:
telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Czekaj, słyszę jak mówisz, możesz to znaleźć za pomocą lsof lub netstat. Tyle że nic tam nie ma
netstat -an | grep LISTEN | grep '\.80'
*comes back blank*
lsof -i :80 | grep LISTEN
*comes back blank
Więc z tego, co wiem o systemach uniksowych, uważam, że to musi być reguła przekazywania pakietów? Tj. Pakiety są przekazywane z portu wejściowego 80 do czegoś innego, który nasłuchuje w tej usłudze.
ipfw show
65535 0 0 allow ip from any to any
Hmm, nie ma w tym nic niezwykłego
pfctl -s nat
No ALTQ support in kernel
ALTQ related functions disabled
Nie ma w tym nic niezwykłego
Moje pytanie brzmi: w jaki sposób mogę wyświetlić dowolne reguły przekazywania pakietów ... W systemie Linux mogę po prostu zrobić iptables -L -t NAT lub iptables -L. Czy też eksperci OSX mogą pomóc mi zdiagnozować ten problem?
lsof
Grep użyłeś wróci puste; numery portów są mapowane na/etc/services
nazwy. Spróbujlsof -i | grep http
...-i :port
formatu, tylko jeśli grep. Problemem będzie to, żelsof
potrzebuje uprawnień roota, aby zobaczyć procesy innych użytkowników, więc powinieneś użyćsudo lsof -i :80
(i spróbowałbym tego bezgrep
, tylko dla pewności ...)lsof -i :80
będąc nadal połączonym w tej sesji Telnet? A poza próbą http: // localhost / , może wpisanie czegoś w wierszu polecenia Telnet ujawni coś ...? (Znów wiem: nawet jeśli wymyślisz to w ten sposób, nie byłaby to odpowiedź na twoje pytanie ...)Odpowiedzi:
Musisz uruchomić te polecenia,
root
aby pokazać procesy innych użytkowników, na przykład:Mac OS X zawiera serwer WWW Apache, którym można sterować za pomocą
apachectl
asroot
. Zwykle jest uruchamiany zalaunchd
pomocą odpowiedniego pliku konfiguracyjnego/System/Library/LaunchAgents/org.apache.httpd.plist
. Jeśli nie jest to Apache działający na porcie 80, prawdopodobnie jest uruchomiony , implementacja menedżera demonów przez Apple. Według Wikipedii :źródło
sudo lsof -i ':80'
może nic nie zwrócić, chyba że ktoś uruchomi to podczas połączenia w sesji Telnet? Ale nawet bez tych poleceń http: // localhost / prawdopodobnie nadal pokazywałby stronę powitalną Apache?sudo apachectl stop
w terminalu.sudo lsof -i -P | grep -i "80"
od superuser.com/questions/984919/...Aby wyjaśnić rzeczywistą odpowiedź na wypadek, gdyby użytkownicy tego szukali.
launchd skanuje
/System/Library/LaunchDaemons/
przy starcie systemu i działa naorg.apache.httpd.plist
tym etapie , gdy apache jest uruchamiany, musi przekierować na niego port 80.sudo apachectl start
zostało zrobioneJednak w
httpd.conf
pliku wystąpił błąd , co oznacza, że apache nie został uruchomiony, chociaż nie zostało to zgłoszone za pomocąapachectl
polecenia.Launchd postanowił nasłuchiwać na porcie 80, ponieważ myślał, że apache jest uruchomiony.
Ale treść dowolnego żądania HTTP spowodowała natychmiastowe zamknięcie połączenia.
sudo lsof -i :80
nie dał odpowiedzisudo netstat -an | grep LISTEN
nie przyniósł odpowiedzi dla portu 80o ile mogłem powiedzieć w żadnych narzędziach diagnostycznych, które wskazywałyby, że port 80 był w użyciu lub nasłuchiwał, nie było żadnych informacji.
naprawienie httpd.conf apache i pomyślne zrestartowanie apache tak, aby httpd był w tabeli ps, doprowadził żądania HTTP do powodzenia.
Dlatego myliłem się, że nie mogłem uruchomić apache, ponieważ już coś nasłuchiwało na porcie 80, a nie sama apache conf była przyczyną
źródło
Właśnie natrafiłem na ten sam problem z OSX El Capitan i programem antywirusowym Avast.
sudo lsof -i ':80'
pokazał połączenie z avast.com.musiałem
/Applications/Uninstall Avast.app
sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
aby zapobiec używaniu go przez port 80.
źródło