Belirli bir limanda dinleyen bir süreci başlatan emri nasıl belirleyebilirim?


0

Aşağıdaki Linux sürümünü kullanıyorum

[davea@mydevbox ~]$ uname -a
Linux mydevbox.mydomain.com 5.7.8-35.36.amzn1.x86_64 #1 SMP Wed Mar 16 17:15:34 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

Belirli bir bağlantı noktasını dinleyen bir işlemi başlatan komutu bulmak istiyorum. İdeal olarak, bu komutun nerede çalıştığını öğrenmek istiyorum. Ama emri tanımlayamıyor gibiyim. Nmap kullanarak bir Jetty sunucusu olduğunu söyleyebilirim…

[davea@mydevbox ~]$ nmap -sV -p 4444 localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2016-04-07 20:54 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00020s latency).
PORT     STATE SERVICE VERSION
4444/tcp open  http    Jetty 5.1.x (Linux/4.4.5-15.26.amzn1.x86_64 amd64 java/1.7.0_79)

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.25 seconds

Jetty sunucusunda hangi komutun ortaya çıktığını bulmanın bir yolu var mı?

Teşekkürler - Dave

Düzenleme: Burada verilen öneri çıktı.

[davea@mydevbox ~]$ sudo lsof -i :4444
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    2140 root   10u  IPv6   9994      0t0  TCP *:krb524 (LISTEN)

[davea@mydevbox ~]$ sudo ps -p $(pidof java) -o args
ERROR: Process ID list syntax error.
********* simple selection *********  ********* selection by list *********
-A all processes                      -C by command name
-N negate selection                   -G by real group ID (supports names)
-a all w/ tty except session leaders  -U by real user ID (supports names)
-d all except session leaders         -g by session OR by effective group name
-e all processes                      -p by process ID
                                      -q by process ID (unsorted & quick)
T  all processes on this terminal     -s processes in the sessions given
a  all w/ tty, including other users  -t by tty
g  OBSOLETE -- DO NOT USE             -u by effective user ID (supports names)
r  only running processes             U  processes for specified users
x  processes w/o controlling ttys     t  by tty
*********** output format **********  *********** long options ***********
-o,o user-defined  -f full            --Group --User --pid --cols --ppid
-j,j job control   s  signal          --group --user --sid --rows --info
-O,O preloaded -o  v  virtual memory  --cumulative --format --deselect
-l,l long          u  user-oriented   --sort --tty --forest --version
-F   extra full    X  registers       --heading --no-heading --context
                                      --quick-pid
                    ********* misc options *********
-V,V  show version      L  list format codes  f  ASCII art forest
-m,m,-L,-T,H  threads   S  children in sum    -y change -l format
-M,Z  security data     c  true command name  -c scheduling class
-w,w  wide output       n  numeric WCHAN,UID  -H process hierarchy
[davea@mydevbox ~]$ 

Yanıtlar:


0

lsof -i: 4444

4444 kullanan işlemleri listelemelisiniz. Çıktının yalnızca kimliğinizin işlemlerini göstermeyle sınırlı kalmaması için root olarak veya sudo aracılığıyla başlatmalısınız.


Doğru, işlemleri listeler, ancak işlemi bu bağlantı noktasını dinleyen şeyin tam komut satırını değil. Soruma yapılan bir düzenlemede, bu komutu koştuğumu görebiliyorsunuz ama sadece "java" yazıyor. Bu Java işleminden hangi komutun başladığını bulmaya çalışıyorum.
Dave,

ps -f $ THATPID size ana işlem kimliği (PPID) hakkında bilgi verir
Gombai Sándor

3

Birçok yolu var. Basit bir tane içerir ss:

# ss -lntp | grep 22
  LISTEN     0      128                       *:22                    *:*      users:(("sshd",1100,3))
  LISTEN     0      128                      :::22                   :::*      users:(("sshd",1100,4))

Seçenekler şu anlama gelir: -lişlemin dinlendiği bağlantı noktalarını görüntüler, -nadları çözümlemez, -tyalnızca TCP bağlantı noktalarını göz önünde bulundurur -p, bu bağlantı noktasını dinleyen işlemi görüntüler. Bu durumda, işlem adını ( sshdçok şaşırtıcı olmayan şekilde) ve işlem kimliği 1100'ü belirlersiniz. Bir UDP bağlantı noktası için yukarıdaki komutun kullanılması zorunludur ss -lnup.

Veya kullanabilirsiniz lsof:

# lsof -i :22
  COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  sshd    1100 root    3u  IPv4  10089      0t0  TCP *:22 (LISEN)
  sshd    1100 root    4u  IPv6  10091      0t0  TCP *:22 (LISTEN

Bir UDP bağlantı noktası için komut olmalıdır lsof -i UDP:22.

Son olarak, belirli bir işlemi başlatan tam komut satırını görmek istiyorsanız, aşağıdakileri yapabilirsiniz:

# ps -p $(pidof sshd) -o args
  COMMAND
  /usr/sbin/sshd -D

Bu durumda tüm komut çok bilgilendirici değildir, ancak bazen olabilir: X sunucunuzun çağrısındaki tüm argümanları biliyor musunuz?

# ps -p $(pidof X) -o args
  COMMAND
  /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch

Daha fazla bilgi edinmek isterseniz, söz konusu programı hangi program zincirinin başlattığını, örneğin programı başlatan kullanıcıyı gösterebilir.

ps auxf

sağ tarafta, şu anda çalışan bir programa götüren çatal zincirini ve birçok bilgiyi gösterecek.

Eğer süreç kimliği öğrendiğinizde, PID, bulabileceğiniz tüm dizinde sisteme bilgi mevcuttur /proc/PIDyanıltıcı kısım bilgi hemen kendini açıklayıcı olmadığını varlık. İlgileniyorsanız, bu makale daha fazla bilgi sağlar, aksi takdirde kullanın man proc.

Son olarak, bu bilginin taşa yazılmadığını unutmayın: programlar kendi bilgilerinin en azından bir kısmını değiştirebilir, örneğin ServerFault'daki bu cevaba bakınız .


Evet, tam komut satırı, görmek istediğim şey, bu yüzden listelediğiniz "ps" komutu işi yapacak gibi görünüyor. Ancak, çalıştırdığımda, sahip olduğunuz şeyi kullanarak sözdizimi hatası alıyorum. Hata soruma düzenleme olarak eklenmiş.
Dave,

@Dave Çalışması garip, sistemimde mükemmel çalışıyor: komutu doğrudan PID işlemini kullanarak denediniz $(pidof java)mi? Ayrıca, önerdiğim diğer çözümü denemelisiniz, yani dosyayı okumalısınız /proc/PID/cmdline.
MariusMatutiae

İlk görüşte ss'ye aşık oldum. Daha önce bahsedilen onu görmedim (ya da hatırlamıyorum) garip.
Gombai Sándor

@ GombaiSándor Bundan daha fazlasını yapabilir lsof.
MariusMatutiae
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.