En regardant dans / proc / $ mypid / fd /, je vois ces fichiers
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 0 -> /dev/pts/36 (deleted)
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 3 -> socket:[1424055856]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 4 -> socket:[1424055868]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 5 -> socket:[1424055882]
Parce que j'ai accès au code, je sais que ces sockets sont liées à des connexions TCP (l'une est une connexion au port 5672 sur une machine, une autre est une connexion au port 3306 sur une autre machine), mais je veux savoir quelle est la socket lié à quelle connexion. Comment puis je faire ça?
Plus généralement, comment demander au système d'exploitation ce qui se trouve à l'autre extrémité du socket?
networking
proc
socket
benhsu
la source
la source
socat
....Réponses:
Commande lsof
Une bonne option pourrait être
lsof
. Commeman lsof
indiqué, il est pratique pour obtenir des informations suropen files such as Internet sockets or Unix Domain sockets
.En l'utilisant
Dans un premier temps, obtenez un aperçu
/proc/$PID/fd/
et les numéros de socket répertoriés.Par exemple, cela
socket:[14240]
pourrait vous intéresser.Utilisez ensuite
lsof -i -a -p $PID
pour imprimer une liste de tous les fichiers réseau$PID
utilisés.-i
produit une liste de fichiers réseau appartenant à un utilisateur ou à un processus-a
combine logiquement les paramètres donnés par AND-p $PID
sélectionne des informations uniquement sur votre processusUne sortie typique pour mon navigateur fonctionnant avec un PID de
2543
pourrait être:et des lignes plus similaires.
Génial! Examinez maintenant de plus près la
DEVICE
colonne. Il correspond à notre socket précédemment répertorié de/proc/$PID/fd/
!Et grâce à la
NAME
section, nous pouvons dire quelle est l'autre extrémité de notre socket.Dans une course réelle, vous pouvez obtenir une bonne quantité de sortie, mais simplement filtrer ou
grep
pour votre socket d'intérêt.Je suis sûr que l'on pourrait combiner toutes les commandes, mais cela devrait suffire pour vous aider à démarrer.
la source
grep -rni ffff88002704d380 /proc
. quelque part sous / proc / peut se trouver votre réponse,cat
votre fichier grep a été trouvé. Mais ne m'arrêtez pas là-dessus ... Ça peut être horrible de mal ici.lsof
lit d' autres informations concernant la prise de/proc/net/tcp
,/proc/net/tcp6
,/proc/net/udp
, et ainsi de suite en fonction du type de prise de courant.