Trouver le process à partir de son port TCP

De knowledge
Révision datée du 21 septembre 2023 à 11:44 par Jpinon (discussion | contributions) (Page créée avec « == La problématique == On a un petit travail de "reverse engineering" à réaliser. Sur un serveur on sait qu'un service est appelé par un appel TCP sur un port donné mais on ne sait pas QUI est appelé. Comment savoir: * De quel process il s'agit * Quelle est la ligne de commande qui a été utilisée pour le lancer. == La solution == === Les outils nécessaires === Pour faire cette analyse il faut plusieurs prérequis. Certes il faut l'acces root mais c'... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

La problématique

On a un petit travail de "reverse engineering" à réaliser. Sur un serveur on sait qu'un service est appelé par un appel TCP sur un port donné mais on ne sait pas QUI est appelé.

Comment savoir:

  • De quel process il s'agit
  • Quelle est la ligne de commande qui a été utilisée pour le lancer.

La solution

Les outils nécessaires

Pour faire cette analyse il faut plusieurs prérequis. Certes il faut l'acces root mais c'est logique. Ensuite il faut qu'un certain nombre d'outils soient installés :

  • ps : c'est la base il est TOUJOURS installé
  • netstat : En général c'est le cas sur un système standard
  • lsof : souvent installé mais ce n'est pas automatique
sudo yum install lsof # CentOS / RHEL / Fedora
sudo dnf install lsof # CentOS/RHEL 8

sudo apt install lsof # Prour les "vrai" linux.

La méthode

La seule chose que l'on sache c'est que le serveur fournit un service sur un port donné : disons 8284 par exemple.

Quel est le numéro du process ?

Pour cela on a deux méthodes.

netstat

La commande netstat donne plein d'informations sur la configuration et le fonctionnement du réseau sur une machine linux. (et Unix en général). On va utiliser sa capacité a avoir la liste des processus en lien avec des ports TCP ouverts.

netstat -ltnp | grep -w ':8284'

Attention a ne pas oublier le ":" (deux points) dans la chaine ':8284' (on changera le ports si besoin) On obtiens quelque-chose qui ressemble à :

tcp6       0      0 :::8284                 :::*                    LISTEN      4468/node /appli/pr

On obtiens l'id du processus (4468 ici) et le début de la ligne de commande. On sait déja que c'est un programme node.js qui fait le travail derrière le port 8284. Si on voit seulement :

tcp6       0      0 :::8284                 :::*                    LISTEN      -

Attention vous n'avez pas les droits root!

lsof

C'est un outil plus adapté a ce problème. Il donne la liste des fichiers ouverts et le processus qui leur est associé. Comme sous unix tout est fichier.... une socket sur un port donné est un ficheir.