Vérifier si Postgresql est à l'écoute
Donné une Adresse IP et numéro de port, est-il possible de vérifier si la machine avec l'adresse IP a Postgresql à l'écoute sur le port spécifié? Si oui, comment?
Je veux juste obtenir une valeur booléenne si Postgresql est à l'écoute sur le port spécifié de la machine.
essayez de vous connecter avec un pg de la bibliothèque du client et de la tentative de connexion. si rien n'est à l'écoute, ou il n'est pas PG, vous obtiendrez différentes erreurs. si c'est pg et en cours d'exécution, vous auriez au moins d'obtenir la permission denied/utilisateur inconnu/autre des erreurs.
Merci pour l'astuce Marc. Je suis en train d'automatiser cette tâche dans le cadre d'une installation de windows. J'envisage d'écrire du code C# pour accomplir cette tâche. Connaissez-vous un bon C# bibliothèque que j'ai pu tenter de se connecter à postgresql? Aussi, si vous pouviez m'aider énumérer les erreurs qui indiquent postgresql est à l'écoute et les erreurs qui indiquent le contraire qui serait également utile d'informations.
Je suis à la recherche dans l'aide de Npgsql
À l'avenir, veuillez préciser un peu plus dans la question d'origine; le "pourquoi" du "comment" que vous demandez. Des détails comme la plate-forme et de la langue sont plutôt utiles à connaître. Toujours inclure votre version de PostgreSQL dans les questions trop.
Merci pour l'astuce Marc. Je suis en train d'automatiser cette tâche dans le cadre d'une installation de windows. J'envisage d'écrire du code C# pour accomplir cette tâche. Connaissez-vous un bon C# bibliothèque que j'ai pu tenter de se connecter à postgresql? Aussi, si vous pouviez m'aider énumérer les erreurs qui indiquent postgresql est à l'écoute et les erreurs qui indiquent le contraire qui serait également utile d'informations.
Je suis à la recherche dans l'aide de Npgsql
À l'avenir, veuillez préciser un peu plus dans la question d'origine; le "pourquoi" du "comment" que vous demandez. Des détails comme la plate-forme et de la langue sont plutôt utiles à connaître. Toujours inclure votre version de PostgreSQL dans les questions trop.
OriginalL'auteur ksun | 2013-06-25
Vous devez vous connecter pour publier un commentaire.
Je pense que vous devez définir ce que vous essayez d'atteindre de meilleurs. Voulez-vous simplement à savoir si rien est à l'écoute sur un certain point? Si PostgreSQL est à l'écoute sur un port donné? Si PostgreSQL est en cours d'exécution et accepter les connexions? Si vous pouvez vous connecter à PostgreSQL, s'authentifier avec succès et émettre des requêtes?
Une option consiste à invoquer
psql
à vous connecter et vérifier le code de résultat. N'essayez pas d'analyser le texte de sortie, puisque c'est le sujet de la traduction dans différentes langues.Mieux, l'utilisation de la bibliothèque cliente pour la langue de votre choix -
psycopg2
pour Python, PgJDBC pour Java, le Pg gem Ruby,DBD::Pg
pour Perl, nPgSQL pour C#, etc. C'est l'approche que je recommande. Le SQLSTATE ou des détails de l'exception de toute erreur de connexion va vous en dire plus sur les raisons de l'échec de la connexion - vous serez en mesure de faire la différence entre le serveur n'écoute pas, échec d'authentification, etc de cette façon. Par exemple, en Python:Il y a des détails de l'exception dans
ex.pgcode
(leSQLSTATE
) pour vous en dire plus sur les erreurs qui sont générés, côté serveur, comme les échecs d'authentification, il va être vide pour que côté client des erreurs.Si vous voulez juste pour voir si quelque chose est à l'écoute sur une adresse IP et le port TCP, vous pouvez utiliser
netcat
(*nix uniquement), ou un simple script dans la langue de votre choix qui crée un socket et un connect() ferme la socket, si elle obtient une réponse positive. Par exemple, le trivial script Python:La même approche s'applique dans tout langage de programmation, juste les détails de la prise de la bibliothèque et de la gestion d'erreur varient.
Pour certains objectifs, il peut également être utile d'utiliser le
netstat
outil pour passivement la liste des processus qui sont à l'écoute sur le réseau sockets. Le haut-netstat
sur Windows est assez mort cérébrale, de sorte que vous avez à faire plus d'analyse de la sortie qu'avecnetstat
pour les autres plateformes, mais ça va encore faire le travail. La présence d'une prise ennetstat
ne veut pas dire que la connexion réussit, cependant, si le processus n'a pas pu, d'une certaine façon que les feuilles de cassé mais toujours en cours d'exécution (bloqué dans une boucle infinie, bloqué par un débogueur,SIGSTOP
ed, etc), alors il ne sera pas répondre à une réelle tentative de connexion.OriginalL'auteur Craig Ringer
Vous pouvez utiliser, par exemple, nmap outil:
Alternativement, vous pouvez simplement "SÉLECTIONNEZ 1" avec psql, et de vérifier de sortie:
Je pense que
netstat
fait partie de Windows. Il peut également déterminer si PostgreSQL est à l'écoute.En fait, juste couru un test avec postgres à l'écoute sur une autre machine et quand j'ai couru nmap j'ai trouvé que l'ÉTAT=filtré. Mais je pense que l'aide de la commande psql avec "Select 1" et de la vérification d'une erreur de connexion peut être la meilleure solution que j'ai rencontré jusqu'à présent.
Sherrill 'Siffler'" Mike, merci je vais aussi regarder dans netstat.
après un bref coup d'oeil dans netstat il semble que, même s'il fait partie de windows, et est un excellent outil pour l'inscription de tous les ports à l'écoute ou les connexions établies sur votre machine, je suis en train de voir si postgres est à l'écoute sur un port spécifié sur une autre machine hôte. Est-il un moyen de le faire avec la commande netstat?
OriginalL'auteur