Quels ports sont utilisés par une application [duplicate]

11

Cette question a déjà une réponse ici:

Je teste une application qui ouvre ses propres ports (agit en tant que serveur pour ces ports, écoute par conséquent sur ces ports) et où la même application se connecte à des ports liés par d'autres applications (agit en tant que client pour ces ports).

J'aimerais avoir un aperçu des ports créés par l'application et des applications et des ports auxquels elle se connecte.

Comment puis-je faire ceci?

Baz
la source

Réponses:

17

Vous pouvez utiliser netstatpour cela. Voir l'exemple (je m'engage ssh):

netstat -putan | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1725/sshd
tcp        0      0 1.2.3.4:45734           1.2.3.5:22              ESTABLISHED 2491/ssh
tcp6       0      0 :::22                   :::*                    LISTEN      1725/sshd

Explication:

J'utilise souvent les paramètres -putan(car ils sont simples à retenir).

  • -p: affiche les PID de l'application / du processus
  • -u: affiche les ports / connexions udp
  • -t: affiche les ports / connexions tcp
  • -a: affiche les sockets à l'écoute et non à l'écoute
  • -n: sortie numérique (ne faites pas de recherches DNS pour les noms d'hôte, etc.)

Dans la sortie ci-dessus, vous voyez qu'il existe un processus ssh daemon ( sshd) avec PID en 1725écoute au port 22de toutes les interfaces réseau ( 0.0.0.0). Il existe également un processus client ssh (PID 2491) connecté à l'adresse IP 1.2.3.5au numéro de port 22. Mon adresse IP est 1.2.3.4et mon port externe 45734. Vous voyez que la connexion est établie. Par conséquent je suis connecté via ssh.

le chaos
la source
Une connexion TCP établie sur le port 22 n'indique pas une authentification réussie. Le protocole TCP doit être établi avant que l'authentification dans les deux sens puisse se produire.
Jamesbtate
@Puddingfox oui, nous pourrions mieux dire "je suis connecté à ce port", mais pour la compréhension, j'ai dit "je suis connecté", car c'est plus illustratif.
chaos
1
hehe ... `-putan ' Je suis tellement tenté de corriger cette faute d'orthographe mineure;)
James Mertz
Pourquoi utiliser des utilitaires obsolètes alors que des utilitaires modernes sont disponibles? ss -lntp est l'utilitaire fourni par la suite iproute2 .
MariusMatutiae
7

Un autre outil qui peut faire cela est lsof:

# lsof -i -a -p 1981
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP host.example.com:ssh (LISTEN)
# lsof -i -a -p 1981 -n
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP 10.1.2.3:ssh (LISTEN)
# lsof -i -a -p 1981 -n -P
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP 10.1.2.3:22 (LISTEN)
#

Les options utilisées sont les suivantes:

  • -i imprimer les ports Internet ouverts par un processus
  • -a pour que toutes les options soient ET-ed
  • -p 1981 pour afficher le résultat du processus 1981
  • -n pour empêcher la recherche de nom d'hôte et afficher l'adresse IP à la place
  • -P pour empêcher la recherche de service et afficher le numéro de port à la place

lsofL'avantage est que vous pouvez spécifier le processus à vérifier plutôt que de devoir le sortir d'une sortie plus importante. netstatest plus fiable sur les systèmes, bien qu’il lsofdevienne de plus en plus standard.

Gowenfawr
la source
Je souhaite exécuter cette commande avant de lancer l'application que je souhaite surveiller, mais puis-je déterminer le pid qu'une application obtiendra avant de la lancer?
Baz
@Baz, si vous souhaitez surveiller une application au démarrage (par exemple, avant de savoir qu'il s'agit d'un PID), vous devez essayer la stracesolution proposée par @olivecoder.
Gowenfawr
3

Nous avons déjà de bonnes réponses, mais ils ne répertorient que les ports ouverts au moment de l'exécution de la commande.

strace est le bon outil pour surveiller les connexions ouvertes pendant la durée de vie de l'application:

strace -e socket,connect,close -f -o hipchat.strace.txt hipchat

La sortie afficherait des informations supplémentaires telles que les demandes UDP et les connexions ouvertes mais fermées.

olivecoder
la source
0

ss -a4 | less

Je suppose que vous parlez d'IPv4 ... Sinon, vous pouvez remplacer le 4 dans la commande précédente par 6. Le paramètre -a permet d'afficher tous les ports (en écoute et non). Vous pouvez ajouter -n aux paramètres si vous ne voulez pas résoudre les noms à l'écran.

pourri777
la source