ver usando saber que puertos puerto para ocupado los hat esta como comando aplicacion abiertos unix solaris

unix - usando - ¿Qué proceso está escuchando en un puerto determinado en Solaris?



ver puertos abiertos red hat (11)

Así que me conecto a un cuadro de Solaris, trato de iniciar Apache y descubro que ya hay un proceso de escucha en el puerto 80, y no es Apache. Nuestras cajas no tienen lsof instalado, por lo que no puedo consultar con eso. Creo que podría hacer:

pfiles `ls /proc` | less

y busque "port: 80", pero si alguien tiene una mejor solución, ¡soy todo oídos! Mejor aún si puedo buscar el proceso de escucha sin ser root. Estoy abierto a soluciones shell y C; No me importaría tener un pequeño ejecutable personalizado para llevar conmigo la próxima vez que esto ocurra.

Actualizado: estoy hablando de instalaciones genéricas de Solaris para las que no soy administrador (aunque sí tengo acceso de superusuario), por lo que instalar cosas desde el disco de software gratuito no es una opción. Obviamente, ninguno de los dos está utilizando extensiones específicas de Linux para fuser, netstat u otras herramientas. Hasta el momento, correr archivos en todos los procesos parece ser la mejor solución, desafortunadamente. Si ese sigue siendo el caso, probablemente publique una respuesta con un código ligeramente más eficiente que el anterior.


Lo más probable es que sea el servidor administrativo del sol ... Generalmente se incluye junto con el directorio de Sun y algunas otras cosas del webmin-ish que están en la instalación predeterminada.


Si tiene acceso a netstat , eso puede hacer precisamente eso.


Es posible que no desee, pero su mejor opción es tomar el CD de Sunfreeware e instalar lsof.

Aparte de eso, sí, puede arrastrarse en / proc con un guión de shell.


Este es un enfoque indirecto, pero se puede ver si un sitio web se carga en el navegador web de su elección de lo que se está ejecutando en el puerto 80. O puede telnet al puerto 80 y ver si obtiene una respuesta que le da una pista como a lo que se está ejecutando en ese puerto y puedes apagarlo. Como el puerto 80 es el puerto predeterminado para el tráfico http, existe algún tipo de servidor HTTP ejecutándose de manera predeterminada, pero no hay garantía.


La respuesta de Mavroprovato informa más que solo los puertos de escucha. Los puertos de escucha son tomas sin par. El siguiente programa Perl informa solo los puertos de escucha. Funciona para mí en SunOS 5.10.

#! /usr/bin/env perl ## ## Search the processes which are listening on the given port. ## ## For SunOS 5.10. ## use strict; use warnings; die "Port missing" unless $#ARGV >= 0; my $port = int($ARGV[0]); die "Invalid port" unless $port > 0; my @pids; map { push @pids, $_ if $_ > 0; } map { int($_) } `ls /proc`; foreach my $pid (@pids) { open (PF, "pfiles $pid 2>/dev/null |") || warn "Can not read pfiles $pid"; $_ = <PF>; my $fd; my $type; my $sockname; my $peername; my $report = sub { if (defined $fd) { if (defined $sockname && ! defined $peername) { print "$pid $type $sockname/n"; } } }; while (<PF>) { if (/^/s*(/d+):.*$/) { &$report(); $fd = int ($1); undef $type; undef $sockname; undef $peername; } elsif (/(SOCK_DGRAM|SOCK_STREAM)/) { $type = $1; } elsif (/sockname: AF_INET[6]? (.*) port: $port/) { $sockname = $1; } elsif (/peername: AF_INET/) { $peername = 1; } } &$report(); close (PF); }


Encontré este script en alguna parte. No recuerdo dónde, pero funciona para mí:

#!/bin/ksh line=''---------------------------------------------'' pids=$(/usr/bin/ps -ef | sed 1d | awk ''{print $2}'') if [ $# -eq 0 ]; then read ans?"Enter port you would like to know pid for: " else ans=$1 fi for f in $pids do /usr/proc/bin/pfiles $f 2>/dev/null | /usr/xpg4/bin/grep -q "port: $ans" if [ $? -eq 0 ]; then echo $line echo "Port: $ans is being used by PID:/c" /usr/bin/ps -ef -o pid -o args | egrep -v "grep|pfiles" | grep $f fi done exit 0

Editar: Aquí está la fuente original: [Solaris] ¿Qué proceso está vinculado a un puerto determinado?


Aquí hay un trazador de líneas:

ps -ef| awk ''{print $2}''| xargs -I ''{}'' sh -c ''echo examining process {}; pfiles {}| grep 80''

el "PID del proceso examinador de eco" se imprimirá antes de cada búsqueda, por lo que una vez que vea una salida que hace referencia al puerto 80, sabrá qué proceso está sosteniendo el asa.

Alternativamente use:

ps -ef| grep $USER|awk ''{print $2}''| xargs -I ''{}'' sh -c ''echo examining process {}; pfiles {}| grep 80''

Dado que a ''pfiles'' podría no gustarle que intente acceder a los procesos de otros usuarios, a menos que sea la raíz, por supuesto.


Creo que la primera respuesta es la mejor que escribí mi propio script de shell desarrollando esta idea:

#!/bin/sh if [ $# -ne 1 ] then echo "Sintaxis:/n/t" echo " $0 {port to search in process }" exit else MYPORT=$1 for i in `ls /proc` do pfiles $i | grep port | grep "port: $MYPORT" > /dev/null if [ $? -eq 0 ] then echo " Port $MYPORT founded in $i proccess !!!/n/n" echo "Details/n/t" pfiles $i | grep port | grep "port: $MYPORT" echo "/n/t" echo "Process detail: /n/t" ps -ef | grep $i | grep -v grep fi done fi


#!/usr/bin/bash # This is a little script based on the "pfiles" solution that prints the PID and PORT. pfiles `ls /proc` 2>/dev/null | awk "/^[^ //t]/{smatch=/$0;next}/port:[ //t]*${1}/{print smatch, /$0}{next}"


netstat en Solaris no le dirá esto, ni las versiones anteriores de lsof, pero si descarga y construye / instala una versión más nueva de lsof, esto puede decirle eso.

$ lsof -v lsof version information: revision: 4.85 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man configuration info: 64 bit kernel constructed: Fri Mar 7 10:32:54 GMT 2014 constructed by and on: user@hostname compiler: gcc compiler version: 3.4.3 (csl-sol210-3_4-branch+sol_rpath) 8<- - - - ***SNIP*** - - -

Con esto puedes usar la opción -i:

$ lsof -i:22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 521 root 3u IPv6 0xffffffff89c67580 0t0 TCP *:ssh (LISTEN) sshd 5090 root 3u IPv6 0xffffffffa8668580 0t322598 TCP host.domain.com:ssh->21.43.65.87:52364 (ESTABLISHED) sshd 5091 johngh 4u IPv6 0xffffffffa8668580 0t322598 TCP host.domain.com:ssh->21.43.65.87:52364 (ESTABLISHED)

Lo que muestra exactamente lo que estás pidiendo.

Ayer tuve un problema con un proceso Jetty (Java) estrellado, que solo dejó 2 archivos en su directorio / proc / [PID] (psinfo y uso).

pfiles no pudo encontrar el proceso (porque la fecha que necesitaba no estaba allí)

Lo encontré por mí.


Desde Solaris 11.2 en adelante, puede hacerlo con el comando netstat . Echa un vistazo aquí . El -u es lo que estás buscando.

Si se encuentra en una versión inferior de Solaris, como lo han señalado otros, la forma de hacerlo de Solaris es una especie de envoltorio de scripts alrededor del comando pfiles . Sin embargo, ten en cuenta que el comando pfiles detiene el proceso por una fracción de segundo para inspeccionarlo. Para el 99.9% de los procesos esto no es importante. Desafortunadamente tenemos un proceso que dará un volcado de núcleo si se golpea con un comando pfiles por lo que somos un poco cautelosos con el uso del comando. Tu situación puede ser totalmente diferente si estás en el 99.9%, lo que significa que puedes usar el comando pfiles forma segura.