tcpdump Ajouter le nom du service associé au port

J’ai donc maintenant une table TBIPPORT qui contient pour chaque connexion, par minutes, la date, l’heure à la minute prêt, les quantités de données émises et reçues, l’IP du partenaire et le port utilisé.

J’avais dis qu’ j’aimerai afficher  nom du service associé au port. Mais je n’avais pas envie de demander à tcpdump de le faire car j’aurai eu en sortie plusieurs fois les mêmes nom de services (car je peux avoir plusieurs fois le même port).

Et puis les noms de services sont toujours les mêmes pour les services connus du moins. Je ne m’intéresse qu’au 8192 premiers ports. On trouve sur le web, la liste des services par port. Je m’en suis fait un fichier téléchargeable ici : tbservicename

Et j’utilise les possibilité du SQL pour afficher le nom du service si je l’ai grâce à une jointure gauche (LEFT JOIN), ainsi, pas besoin de demander quoi que ce soit à TCPDUMP.

Voici le code de création de la table TBSERVICENAME :

TBSERVICENAME
CREATE TABLE MYTCPSTAT.TBSERVICENAME (
PORT int(11) NOT NULL,
SERVICENAME varchar(128) CHARSET=utf8mb4 COLLATE=utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (PORT)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

Et pour afficher le service si je l’ai il suffira de faire :

SELECT A.PORT, B.SERVICENAME 
FROM MYTCPSTAT.TBIPPORT AS A
LEFT JOIN MYTCPSTAT.TBSERVICENAME AS B
ON A.PORT=B.PORT;

Dans ce genre de circonstance, en théorie, tout PORT présent dans TBIPPORT devrait exister dans TBSERVICENAME et je devrai créer une clé étrangère. Dans notre cas, ce ne serait pas une bonne idée car tcpdump me donne d’abord les trames, que je possède le nom du service associé ou pas donc cela ne fonctionnerait pas.

Par contre, ne rien faire ferait rapidement chuter les performances de MySQL sur cette jointure. Alors il nous faut un créer un index (surtout pas unique) sur la colonne PORT de TBIPPORT, ceci rendra l’exécution de cette requête bien plus rapide.

ALTER TABLE MYTCPSTAT.TBIPPORT
ADD INDEX IXPORTIPPORT (PORT ASC) VISIBLE;

 

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.