/ Proc / fd dizinindeki soket dosyaları hakkında daha fazla bilgiyi nasıl edinebilirim?


33

/ Proc / $ mypid / fd / dizinine bakarak bu dosyaları görüyorum

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]

Kodun erişimine sahip olduğum için, bu soketlerin TCP bağlantılarına bağlı olduğunu biliyorum (biri bazı makinelerde 5672 numaralı bağlantı noktasına bir bağlantı, diğeri ise diğer bazı makinelerde bağlantı noktası 3306'ya bağlantıdır), ancak hangi soketin olduğunu bilmek istiyorum hangi bağlantıya bağlı. Bunu nasıl yapabilirim?

Daha genel olarak, İşletim Sistemine soketin diğer ucunda ne olduğunu nasıl sorabilirim?


1
Kullanın socat....
heemayl 14:15

Yanıtlar:


40

Komut lsof

İyi bir seçenek olabilir lsof. Belirtildiği man lsofgibi, hakkında bilgi edinmek için kullanışlıdır open files such as Internet sockets or Unix Domain sockets.


Onu kullanarak

İlk başta, /proc/$PID/fd/listelenen soket numaraları hakkında genel bilgi edinin .
Örneğin, socket:[14240]ilginizi çekebilir.

Sonra kullandığınız lsof -i -a -p $PIDtüm ağ dosyalarının bir listesini yazdırmak için kullanın $PID.

  • -i bir kullanıcıya veya sürece ait olan ağ dosyalarının bir listesini üretir

  • -a mantıksal olarak birleştirir ya da VE verilen parametreleri

  • -p $PID yalnızca işleminizle ilgili bilgileri seçer

Tarayıcım için PID ile çalışan tipik bir çıktı 2543şöyle olabilir:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
browser 2543 pidi   55u  IPv4  14240      0t0  TCP  pidi.router.lan:55038->stackoverflow.com:https (ESTABLISHED)

ve daha benzer çizgiler.

Harika! Şimdi DEVICEsütuna daha yakından bir göz atın . Bizim daha önce listelenen soketten eşleşiyor /proc/$PID/fd/!
Ve NAMEbölüm sayesinde soketimizin diğer ucunun ne olduğunu söyleyebiliriz.

Gerçek bir dünya koşusunda, iyi bir miktar çıktı elde edebilirsiniz, ancak sadece filtrelemek veya grepilgilendiğiniz soket için.

Birinin tüm komutları bir araya getirebileceğinden eminim, ama başlaman için bu yeterli olmalı.


Teşekkür ederim! Oy verildi ve kabul edildi. Lsof içinde "unix 0xffff88002704d380 0t0 1423733559 soketi" olarak gösterilen bir soket görüyorum, nasıl 0xffff88002704d380'in kazıldığını nasıl bulabilirim?
benhsu

1
"unix 0xfff ...", bir unix_sock yapısının çekirdek bellek adresi gibi görünüyor. Bu yapı soket bitiş noktanıza bir işaretçi içerir. Bir göz atın grep -rni ffff88002704d380 /proc. / proc / altında bir yerde cevabınız yalan olabilir, catdosya grep bulundu. Ama beni bu konuda zorlama ... Burada yanlış korkunç olabilir.
pidi

lsofdan soket ile ilgili diğer bilgileri okur /proc/net/tcp, /proc/net/tcp6, /proc/net/udp, ve soket tipine bağlı bu kadar.
Jesin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.