Este grupo de trabajo ha estado mucho tiempo investigando para dar respuesta a tus interrogantes, te ofrecemos la respuesta por eso deseamos que te resulte de gran apoyo.
Solución:
Puede utilizar, por ejemplo, la herramienta nmap:
=$ sudo nmap -v -p 5930 127.0.0.1
Starting Nmap 6.00 ( http://nmap.org ) at 2013-06-25 19:28 CEST
Initiating SYN Stealth Scan at 19:28
Scanning localhost (127.0.0.1) [1 port]
Discovered open port 5930/tcp on 127.0.0.1
Completed SYN Stealth Scan at 19:28, 0.03s elapsed (1 total ports)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000045s latency).
PORT STATE SERVICE
5930/tcp open unknown
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
Raw packets sent: 1 (44B) | Rcvd: 2 (88B)
Alternativamente, puede simplemente “SELECCIONAR 1” con psql y verificar la salida:
=$ psql -h 127.0.0.1 -p 5930 -c "select 1"
?column?
----------
1
(1 row)
=$ psql -h 127.0.0.1 -p 5940 -c "select 1"
psql: could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 5940?
Creo que necesitas definir mejor lo que estás tratando de lograr. ¿Solo quieres saber si cualquier cosa está escuchando en cierto punto? Si PostgreSQL está escuchando en un puerto determinado? ¿Si PostgreSQL se está ejecutando y realmente acepta conexiones? ¿Si puede conectarse a PostgreSQL, autenticarse correctamente y realizar consultas?
Una opción es invocar psql
para conectarse y comprobar el código de resultado. No intente analizar el texto de salida, ya que está sujeto a traducción a diferentes idiomas.
Mejor, utilice la biblioteca cliente para el idioma que elija: psycopg2
para Python, PgJDBC para Java, la gema Pg para Ruby, DBD::Pg
para Perl, nPgSQL para C #, etc. Este es el enfoque que recomendaría. Los detalles de SQLSTATE o de la excepción de cualquier error de conexión le dirán más sobre por qué falló la conexión; podrá notar la diferencia entre el servidor no escucha, falla de autenticación, etc. de esta manera. Por ejemplo, en Python:
import psycopg2
try:
conn = psycopg2.connect("host=localhost dbname=postgres")
conn.close()
except psycopg2.OperationalError as ex:
print("Connection failed: 0".format(ex))
Hay detalles de excepción en ex.pgcode
(el SQLSTATE
) para informarle más sobre los errores que se generan en el servidor, como fallas de autenticación; estará vacío para errores del lado del cliente.
Si solo quieres ver si algo está escuchando en un puerto IP y TCP determinado, puede usar netcat
(* nix solamente), o un script simple en el idioma de su elección que crea un socket y hace un connect () luego cierra el socket si obtiene una respuesta exitosa. Por ejemplo, el siguiente script de Python trivial:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect(('localhost',5432))
s.close()
except socket.error as ex:
print("Connection failed with errno 0: 1".format(ex.errno, ex.strerror))
El mismo enfoque se aplica en cualquier lenguaje de programación, solo varían los detalles de la biblioteca de sockets y el manejo de errores.
Para algunos fines, también puede ser útil utilizar el netstat
herramienta para enumerar pasivamente qué procesos están escuchando en qué sockets de red. El incorporado netstat
en Windows tiene bastante muerte cerebral, por lo que debe hacer más análisis de la salida que con netstat
para otras plataformas, pero seguirá funcionando. La presencia de un enchufe en netstat
Sin embargo, no significa que la conexión tenga éxito; si el proceso ha fallado de alguna manera que lo deja roto pero aún en ejecución (atascado en un bucle infinito, bloqueado por un depurador, SIGSTOP
ed, etc.), entonces no responderá a un intento de conexión real.
En breve
En detalles
La forma más rápida es usar netcat
alias nc
con la capacidad de tiempo de espera como se comparte aquí
Los resultados como 0/1 significa que postgres funciona / no funciona
echo 'QUIT' | nc -w SECONDS YOUR_HOST PORT; echo $?
# eg
echo 'QUIT' | nc -w 1 localhost 5432; echo $?
Otra forma también más rápida que me funciona es usar telnet
como se discute aquí.
echo -e 'x1dclosex0d' | telnet YOUR_HOST PORT
# eg
echo -e 'x1dclosex0d' | telnet localhost 5432
Te mostramos reseñas y puntuaciones
Recuerda difundir esta reseña si te ayudó.