Estoy buscando enumerar todos los puertos en los que un PID está escuchando actualmente.
¿Cómo recomendaría que obtenga este tipo de datos sobre un proceso?
Estoy buscando enumerar todos los puertos en los que un PID está escuchando actualmente.
¿Cómo recomendaría que obtenga este tipo de datos sobre un proceso?
Respuestas:
Puede usar ss
desde el paquete iproute2 (que es similar a netstat
):
ss -l -p -n | grep "pid=1234,"
o (para versiones anteriores de iproute2):
ss -l -p -n | grep ",1234,"
Reemplace 1234 con el PID del programa.
-u
o solo -t
para udb o tcp. : +1: Y todo esto se puede apilar de esta manera:, ss -tlnp
y para eliminar la salida de ancho de relleno, lo que me parece molesto , puede canalizar a través de cat o menos o w / e:ss -tlnp | cat
ss -nlp | cat
, eso es más o menos, muéstrame los procesos de escucha (-l), sus números de puerto (-n) y su información de proceso (-p), y no intentes ajustar la salida a mi shell | cat
( o menos o lo que sea). Solo me tomó dos años acostumbrarme a eso: D
No conozco una forma de usar iproute2
herramientas. Pero como solución alternativa, puedes probar este.
lsof -Pan -p PID -i
debería darle la información que está buscando.
Salida
lsof -Pan -p 27808 -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 27808 apache 5u IPv6 112811294 0t0 TCP *:80 (LISTEN)
httpd 27808 apache 7u IPv6 112811298 0t0 TCP *:8443 (LISTEN)
httpd 27808 apache 9u IPv6 112811303 0t0 TCP *:443 (LISTEN)
Obtuve este comando desde aquí, pero no estoy seguro del enlace exacto, ya que todos los anoté en el cuaderno. Pero también puedes echar un vistazo desde allí.
Puede usar netstat
esto para descubrir el pid de cada proceso de escucha.
netstat: imprime conexiones de red, tablas de enrutamiento, estadísticas de interfaz, conexiones enmascaradas y membresías de multidifusión
-a, --todos muestran tomas de escucha y no escucha (para TCP, esto significa conexiones establecidas). Con la opción --interfaces, muestra las interfaces que no están marcadas
--numeric, -n Muestra direcciones numéricas en lugar de intentar determinar nombres de host, puerto o usuario simbólicos.
-p, --program Muestra el PID y el nombre del programa al que pertenece cada socket.
Aquí hay un ejemplo:
# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1507/rpcbind
tcp 0 0 0.0.0.0:51188 0.0.0.0:* LISTEN 1651/rpc.statd
tcp 0 0 0.0.0.0:1013 0.0.0.0:* LISTEN 1680/ypbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1975/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1763/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2081/master
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 2119/mongod
tcp 0 48 172.16.33.73:22 172.16.127.110:51850 ESTABLISHED 25473/sshd
tcp 0 0 172.16.33.73:22 172.16.127.110:51214 ESTABLISHED 24699/sshd
tcp 0 0 :::111 :::* LISTEN 1507/rpcbind
tcp 0 0 :::9200 :::* LISTEN 1994/java
tcp 0 0 :::9300 :::* LISTEN 1994/java
tcp 0 0 :::22 :::* LISTEN 1975/sshd
tcp 0 0 ::1:631 :::* LISTEN 1763/cupsd
tcp 0 0 ::1:25 :::* LISTEN 2081/master
tcp 0 0 :::59162 :::* LISTEN 1651/rpc.statd
netstat
herramientas iproute2 han dejado de usarlo y estoy tratando de evitarlo.
La respuesta de @ jofel le muestra la herramienta adecuada para usar ss
, aquí están los reemplazos para las otras herramientas de red en iproute2.
Los comandos en desuso y sus equivalentes iproute2 son los siguientes:
deprecated replacement(s)
========== ==============
- arp ip n (ip neighbor)
- ifconfig ip a (ip addr), ip link, ip -s (ip -stats)
- iptunnel ip tunnel
- iwconfig iw
- nameif ip link, ifrename
- netstat ss, ip route (for netstat-r), ip -s link (for netstat -i),
ip maddr (for netstat-g)
- route ip r (ip route)
La lista básica también está aquí en Wikipedia: http://en.wikipedia.org/wiki/Iproute2 .
Otro método para lsof
si no conoce el PID, pero solo el nombre del Programa:
lsof -Pa -p $(pgrep [programName]) -i
lsof
4.89 en ubuntu 16.04
pgrep <program name>
luego elija el PID que necesita para el comando anterior. reemplazando $(pgrep [programName])
con el PID #
ss
no tiene filtrado en PID, excepto para los sockets de netlink.