Bir işlemin bağlantı noktası açıp açmadığını öğrenmek için “/ proc” bölümünü okuyun


13

Harici komutları kullanmadan bir bağlantı noktası açılmış olarak belirli bir PID ile bir işlem olup olmadığını bilmek gerekir. O zaman /procdosya sistemini kullanmalıyım . /proc/$PID/net/tcpÖrneğin dosyayı okuyabilir ve işlem tarafından açılan TCP bağlantı noktaları hakkında bilgi alabilirim. Ancak, çok iş parçacıklı bir işlemde, /proc/$PID/task/$TIDdizin de bir net/tcpdosya içerir . Sorum şu:

tüm iş parçacığı net/tcpdosyaları üzerinden gitmek gerekir , yoksa iş parçacıkları tarafından açılan bağlantı noktası işlem net/tcpdosyasına yazılır .

Yanıtlar:


23

Örneğin / proc / $ PID / net / tcp dosyasını okuyabilir ve işlem tarafından açılan TCP bağlantı noktaları hakkında bilgi alabilirim.

Bu dosya, işlem tarafından açılan tcp bağlantı noktalarının bir listesi değildir . Geçerli ağ ad alanındaki tüm açık tcp bağlantı noktalarının bir listesidir ve aynı ağ ad alanında çalışan işlemler için içeriğiyle aynıdır/proc/net/tcp .

İşleminiz tarafından açılan bağlantı noktalarını bulmak için, soket tanımlayıcılarının bir listesini almanız /proc/<pid>/fdve ardından bu tanımlayıcıları inodealanıyla eşleştirmeniz gerekir /proc/net/tcp.


Cevabınız için teşekkür ederim. İşlem çok iş parçacıklıysa, fdher iş parçacığının tüm dizinini gözden geçirmem gerekir mi? Veya /proc/pid/fddizin dizinleri "miras" /proc/pid/task/tid/fd?
rmonjo

Emin değilim, ama bu test edilmesi kolay bir şey gibi görünüyor.
larsks

8
@rmonjo Konular dosyaları açamaz, yalnızca işlemler açabilir. fdBir dişin dizin sadece tekrarlar fdsürecin dizini.
Gilles 'SO- kötü olmayı bırak'

0

Lütfen

cat /proc/$PID/net/tcp

ve bunun gibi çıktılar alacaksınız

  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
  0: 00000000:01BB 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 2891985097 1 0000000000000000 100 0 0 10 0

Çıktının ikinci sütunu (local_address) bağlantı noktasını Onaltılık olarak gösterir. Onaltılı kodu ondalığa dönüştürmek için Programlama Hesaplayıcınızı kullanın.

Örneğin, burada bağlantı noktası: 01BB (onaltılı olarak) HTTPS varsayılan bağlantı noktası olan 433'e (ondalık olarak) eşittir.

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.