viernes 19 de febrero de 2010

Como ver conexiones de red por proceso en MacOSX.

Cuando uno quiere ver cuales son las conexiones de red asociadas a sus respectivas PID en el sistema, en linux podemos utilizar:

my_linux_box $ netstat -pn

el cual nos arrojará un lindo listado de conexiones asociadas a las respectivas PIDs del sistema.

Quien hace esto posible es el switch 'p', pero, al parecer, este no es un standard, y para colmo, no está disponible en la versión de netstat disponible para MacOSX.

Esto además significa que los scripts que (con tanto amor) generemos no serían portables a otros sistemas Unix, ya que por lo que pude averiguar, hay varios UNIXs mas que sufren esto.

Por lo tanto una alternativa (en teoría 100% compatible con todos los unix) es utilizar el viejo y conocido lsof, de la siguiente forma:


snake-island:/Us*/jo*/Do*/data-integration: jonatan$ lsof -i -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
SystemUIS 170 jonatanalexisanauati 10u IPv4 0x3d69d90 0t0 UDP *:*
firefox-b 771 jonatanalexisanauati 67u IPv4 0xa966a68 0t0 TCP 186.13.221.96:49801->74.125.47.83:https (ESTABLISHED)
firefox-b 771 jonatanalexisanauati 69u IPv4 0x9e50270 0t0 TCP 186.13.221.96:49816->74.125.47.83:https (ESTABLISHED)
firefox-b 771 jonatanalexisanauati 72u IPv4 0xa964a68 0t0 TCP 186.13.221.96:49758->74.125.47.191:http (ESTABLISHED)
firefox-b 771 jonatanalexisanauati 82u IPv4 0x85b7270 0t0 TCP 186.12.227.84:54534->17.149.160.21:http (CLOSED)
firefox-b 771 jonatanalexisanauati 89u IPv4 0xa96866c 0t0 TCP 186.13.221.96:49732->74.125.47.191:http (ESTABLISHED)
NewsFire 8831 jonatanalexisanauati 7u IPv4 0xa964270 0t0 TCP 186.13.221.96:49761->74.125.47.133:http (CLOSE_WAIT)
NewsFire 8831 jonatanalexisanauati 10u IPv4 0xa968a68 0t0 TCP 186.13.221.96:49762->74.125.47.191:http (CLOSE_WAIT)
NewsFire 8831 jonatanalexisanauati 11u IPv4 0xa966e64 0t0 TCP 186.13.221.96:49810->74.125.47.191:http (ESTABLISHED)


el switch 'i' hace la magia, y hasta se puede ser un poco mas específico,
por ejemplo si lo que se quiere es ver todas las conexiones tcp:


snake-island:/Us*/jo*/taller: jonatan$ lsof -itcp -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firefox-b 771 jonatanalexisanauati 67u IPv4 0xa964e64 0t0 TCP 186.13.221.96:49769->74.125.47.17:https (ESTABLISHED)
firefox-b 771 jonatanalexisanauati 69u IPv4 0xa966a68 0t0 TCP 186.13.221.96:49755->74.125.47.191:http (ESTABLISHED)
firefox-b 771 jonatanalexisanauati 71u IPv4 0x9e50270 0t0 TCP 186.13.221.96:49757->74.125.47.191:http (ESTABLISHED)
firefox-b 771 jonatanalexisanauati 72u IPv4 0xa964a68 0t0 TCP 186.13.221.96:49758->74.125.47.191:http (ESTABLISHED)
firefox-b 771 jonatanalexisanauati 74u IPv4 0x9e5066c 0t0 TCP 186.13.221.96:49760->74.125.47.83:https (ESTABLISHED)
firefox-b 771 jonatanalexisanauati 82u IPv4 0x85b7270 0t0 TCP 186.12.227.84:54534->17.149.160.21:http (CLOSED)
firefox-b 771 jonatanalexisanauati 89u IPv4 0xa96866c 0t0 TCP 186.13.221.96:49732->74.125.47.191:http (ESTABLISHED)
NewsFire 8831 jonatanalexisanauati 7u IPv4 0xa964270 0t0 TCP 186.13.221.96:49761->74.125.47.133:http (CLOSE_WAIT)
NewsFire 8831 jonatanalexisanauati 10u IPv4 0xa968a68 0t0 TCP 186.13.221.96:49762->74.125.47.191:http (CLOSE_WAIT)
NewsFire 8831 jonatanalexisanauati 11u IPv4 0xa966e64 0t0 TCP 186.13.221.96:49763->74.208.86.247:http (CLOSE_WAIT)


Este switch ('i') acepta el siguiente formato (según el man):

[46][protocol][@hostname|hostaddr][:service|port]

where:
46 specifies the IP version, IPv4 or IPv6
that applies to the following address.
'6' may be be specified only if the UNIX
dialect supports IPv6. If neither '4' nor
'6' is specified, the following address
applies to all IP versions.
protocol is a protocol name - TCP or UDP.
hostname is an Internet host name. Unless a
specific IP version is specified, open
network files associated with host names
of all versions will be selected.
hostaddr is a numeric Internet IPv4 address in
dot form; or an IPv6 numeric address in
colon form, enclosed in brackets, if the
UNIX dialect supports IPv6. When an IP
version is selected, only its numeric
addresses may be specified.
service is an /etc/services name - e.g., smtp -
or a list of them.
port is a port number, or a list of them.


Por lo que si queremos ver todas las conexiones tcp sobre ipv4, que se relacionen con google, se puede hacer algo como sigue:


snake-island:/Us*/jo*/Do*/data-integration: jonatan$ lsof -i4tcp@www.google.com -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firefox-b 771 jonatanalexisanauati 70u IPv4 0xa96566c 0t0 TCP 186.13.221.96:49805->74.125.47.106:http (ESTABLISHED)
firefox-b 771 jonatanalexisanauati 71u IPv4 0xa965e64 0t0 TCP 186.13.221.96:49806->74.125.47.103:http (ESTABLISHED)
firefox-b 771 jonatanalexisanauati 73u IPv4 0xa964e64 0t0 TCP 186.13.221.96:49807->74.125.47.103:http (ESTABLISHED)


Referencias:
    lsof(8).

Etiquetas: , , , ,

0 comentarios:

Publicar un comentario en la entrada

Suscribirse a Enviar comentarios [Atom]

<< Página principal