Estoy en OSX Mountain Lion 10.8.3, y recientemente he reiniciado mi Mac.
Quiero iniciar un servicio (como Apache en el puerto 80), pero ya está sucediendo algo con el puerto 80:
telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Espera, te escucho decir, puedes encontrar eso con lsof o netstat. Excepto que no hay nada allí.
netstat -an | grep LISTEN | grep '\.80'
*comes back blank*
lsof -i :80 | grep LISTEN
*comes back blank
Entonces, por lo que sé sobre los sistemas Unix, ¿creo que esta debe ser una regla de reenvío de paquetes? Es decir, los paquetes se reenvían desde el puerto entrante 80 a otra cosa, que está escuchando en ese servicio.
ipfw show
65535 0 0 allow ip from any to any
Hmm, nada inusual allí
pfctl -s nat
No ALTQ support in kernel
ALTQ related functions disabled
Nada inusual allí
Mi pregunta es, ¿cómo puedo mostrar las reglas de reenvío de paquetes ... En Linux, podría hacer iptables -L -t NAT o iptables -L. O, alternativamente, ¿pueden los expertos de OSX ayudarme a diagnosticar este problema?
lsof
grep que usaste volvería en blanco; los números de puerto se asignan a los/etc/services
nombres. Pruebalsof -i | grep http
...-i :port
formato, solo si lo hace grep. Lo que será un problema es quelsof
necesita privilegios de root para ver los procesos de otros usuarios, por lo que debe usarsudo lsof -i :80
(y lo probaría sin elgrep
, solo para asegurarme ...)lsof -i :80
mientras estaba conectado en esa sesión Telnet? ¿Y además de intentar http: // localhost / , tal vez escribir algo en ese indicador de Telnet revela algo ...? (Una vez más, lo sé: incluso si lo descubres de esa manera, no sería la respuesta a tu pregunta ...)Respuestas:
Debe ejecutar estos comandos
root
para mostrar los procesos de otros usuarios, por ejemplo:Mac OS X incluye un servidor web Apache que se puede controlar usando
apachectl
comoroot
. Por lo general, se inicia mediantelaunchd
, el archivo de configuración correspondiente es/System/Library/LaunchAgents/org.apache.httpd.plist
. Si no es este Apache que se ejecuta en el puerto 80, probablemente se lance , la implementación de Apple de un administrador de demonios. De acuerdo con Wikipedia :fuente
sudo lsof -i ':80'
la fuerza en realidad no devuelve nada, a menos que se corre de que mientras está conectado en la sesión Telnet? Pero incluso sin esos comandos, http: // localhost / , probablemente todavía han mostrado alguna página de bienvenida de Apache?sudo apachectl stop
en la terminal.sudo lsof -i -P | grep -i "80"
de superuser.com/questions/984919/...Solo para aclarar la respuesta real en caso de que los usuarios estén buscando esto.
launchd escanea el
/System/Library/LaunchDaemons/
arranque y funciona a partir deorg.apache.httpd.plist
eso cuando apache se inicia, necesita reenviar el puerto 80 a él.sudo apachectl start
fue hechoSin embargo, hubo un error en el
httpd.conf
archivo que significa que apache no se inició, aunque esto no se informó a través delapachectl
comando.Launchd decidió escuchar en el puerto 80 ya que pensaba que Apache estaba activo.
Pero el contenido de cualquier solicitud HTTP resultó en un cierre inmediato de la conexión.
sudo lsof -i :80
no dio respuestassudo netstat -an | grep LISTEN
no arrojó respuestas para el puerto 80no había información hasta donde pude ver en ninguna herramienta de diagnóstico que mostrara que el puerto 80 estaba en uso o escuchando.
arreglar httpd.conf de apache y reiniciar apache con éxito para que httpd estuviera en la tabla ps, llevó a que las solicitudes HTTP tuvieran éxito.
Por lo tanto, estaba equivocando que no podía ejecutar apache porque ya había algo escuchando en el puerto 80, en lugar de que apache conf fuera la causa.
fuente
Acabo de encontrarme con este mismo problema con el antivirus OSX El Capitan y Avast.
sudo lsof -i ':80'
mostró una conexión a avast.com.Tuve que
/Applications/Uninstall Avast.app
sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
para evitar que lo use el puerto 80.
fuente