Autrefois, nous telnet
voyions si un port sur un hôte distant était ouvert: telnet hostname port
il tenterait de se connecter à n'importe quel port d'un hôte et vous donnerait accès au flux TCP brut.
De nos jours, telnet n'est pas installé sur les systèmes sur lesquels je travaille (pour des raisons de sécurité) et toutes les connexions sortantes vers tous les hôtes sont bloquées par défaut. Avec le temps, il est facile de ne plus savoir quels ports sont ouverts pour quels hôtes.
Existe-t-il un autre moyen de vérifier si un port d'un système distant est ouvert - en utilisant un système Linux sur lequel un nombre limité de packages est installé et qui telnet
n'est pas disponible?
linux
networking
port
Steve HHH
la source
la source
brew install telnet
. Je pense donc que les utilisateurs de Linux peuvent faire la même chose avecyum
etapt-get
.Réponses:
Bash est capable d'accéder aux ports TCP et UDP depuis un moment. De la page de manuel:
Donc, vous pouvez utiliser quelque chose comme ceci:
Taa Daa!
la source
cat < /dev/tcp/localhost/22
, vous devriez obtenir votre en-tête sshd. Il est évident que votre processus sur le port 18080 attend que quelque chose entre avant d'envoyer quoi que ce soit. Le port 22 ( SSH ) vous salue avec sa version et tout le reste. Essaye le!Sympa et prolixe! À partir des pages de manuel.
Port unique:
Plusieurs ports:
Gamme de ports:
la source
nc -zv 127.0.0.1 22,80,8080,20-30,443-446
(nc Version: 1.107-4).Netcat est un outil utile:
nc 127.0.0.1 123 &> /dev/null; echo $?
Sortie
0
si le port 123 est ouvert et1
s'il est fermé.la source
telnet
retenir senc
soient également abstenus (quoique - étrangement - pascurl
ouwget
).FOR
déclarations commencent!-G 2
serait plus approprié pour le délai d'attente TCPLa méthode la plus simple, sans faire appel à un autre outil, tel que
socat
, est décrite dans la réponse de @ lornix ci-dessus. Ceci est juste pour ajouter un exemple concret de la façon dont on utiliserait le périphérique psuedo/dev/tcp/...
dans Bash si, par exemple, vous vouliez tester si un autre serveur avait un port donné accessible via la ligne de commande.Exemples
Dites que j'ai un hôte sur mon réseau nommé
skinner
.La raison pour laquelle vous souhaitez placer les
echo > /dev/...
parenthèses de cette manière(echo > /dev/...)
est que si vous ne le faites pas, vous obtenez alors ce type de message avec les tests des connexions en panne.Ceux-ci ne peuvent pas simplement être redirigés vers
/dev/null
car ils viennent de la tentative d'écrire des données sur le périphérique/dev/tcp
. Nous capturons donc toute cette sortie dans une sous-commande, c'est-à-dire(...cmds...)
et redirigeons la sortie de la sous-commande.la source
J'ai constaté que
curl
le travail peut être effectué de la même manièretelnet
et quecurl
je vous dirai même quel protocole attend l'auditeur.Construisez un URI HTTP à partir du nom d'hôte et du port en tant que premier argument
curl
. S'ilcurl
peut se connecter, il signalera une incompatibilité de protocole et se fermera (si l'auditeur n'est pas un service Web). Sicurl
ne peut pas se connecter, il expirera.Par exemple, le port 5672 sur l'hôte 10.0.0.99 est fermé ou bloqué par un pare-feu:
Toutefois, à partir d'un autre système, le port 5672 de l'hôte 10.0.0.99 est accessible et semble exécuter un écouteur AMQP.
Il est important de faire la distinction entre les différents messages: le premier échec était dû au fait que la
curl
connexion au port était impossible. Le deuxième échec est un test de réussite, bien quecurl
prévu un écouteur HTTP au lieu d'un écouteur AMQP.la source
wget -qS -O- http://ip.add.re.ss:port
devrait effectivement faire la même chose.curl myhost:22
.J'espère que cela résoudra votre problème :)
la source
Voici un one-liner:
en utilisant la syntaxe Bash expliquée dans la réponse @lornix .
Pour plus d'informations, consultez: Advanced Bash-Scripting Guide: Chapitre 29.
/dev
et/proc
.la source
Je me suis battu toute la journée parce qu'aucune de ces réponses ne semblait fonctionner pour moi. Le problème est que la version la plus récente de
nc
n'a plus le-z
drapeau, alors que l'accès direct via TCP (selon @lornix et @slm) échoue lorsque l'hôte n'est pas accessible. J'ai finalement trouvé cette page , où j'ai finalement trouvé non pas un mais deux exemples de travail:nc -w1 127.0.0.1 22 </dev/null
(le
-w
drapeau prend en charge le délai d'attente, et le</dev/null
remplace le-z
drapeau)timeout 1 bash -c '(echo > /dev/tcp/127.0.0.1/22) >/dev/null 2>&1'
(la
timeout
commande prend en charge le délai d'attente et le reste provient de @slm)Ensuite, utilisez simplement
&&
et / ou||
(ou même$?
) pour extraire le résultat. Espérons que quelqu'un trouvera cette information utile.la source
En combinant les réponses de @kenorb et de @ Azukikuru, vous pouvez tester le port ouvert / fermé / avec un pare-feu.
Une autre approche avec curl pour atteindre n'importe quel port
la source
Voici une fonction qui choisira l’une des méthodes en fonction de ce qui est installé sur votre système:
la source
Il ne devrait pas être disponible sur votre boîte, mais essayez avec
nmap
.la source
nmap
est un bon outil, mais non disponible sur ces systèmes. Plutôt que de le téléchargernmap
, de le compiler, de l'installer dans mon répertoire personnel, puis de le copier sur tous les autres systèmes, j'espérais trouver un moyen d'utiliser les outils existants disponibles dans la plupart des installations Linux.pour référence, développant la réponse de @peperunas:
la façon d'utiliser nmap pour tester, est:
(exemple ci-dessus utilise localhost à des fins de démonstration)
la source
Si vous devez tester plus que sur le système, vous pouvez utiliser notre outil de test, dda-serverspec ( https://github.com/DomainDrivenArchitecture/dda-serverspec-crate ) pour ces tâches. Vous pouvez définir vos attentes
et testez ces attentes soit avec localhost, soit avec des hôtes distants (connectez-vous via ssh). Pour les tests à distance, vous devez définir une cible:
Vous pouvez exécuter le test avec
java -jar dda-serverspec.jar --targets targets.edn serverspec.edn
Sous le capot, nous utilisons netcat tel que proposé ci-dessus ...
la source