2011-05-13 33 views
19

/proc/net/tcp içinde st sütununun olası değerlerini bilmek istiyorum. Ben st sütununun netstat(8) veya ss(8)'dan STATE sütununa eşit olduğunu düşünüyorum./proc 'den olası iç soket durumlarının listesi

Üç kodlarını teşhis etmeyi başardığı:

sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode 
0: 0100007F:08A0 00000000:0000 0A 00000000:00000000 00:00000000 00000000  0  0 7321 1 ffff81002f449980 3000 0 0 2 -1      
1: 00000000:006F 00000000:0000 0A 00000000:00000000 00:00000000 00000000  0  0 6656 1 ffff81003a30c080 3000 0 0 2 -1      
2: 00000000:0272 00000000:0000 0A 00000000:00000000 00:00000000 00000000  0  0 6733 1 ffff81003a30c6c0 3000 0 0 2 -1      
3: 0100007F:0277 00000000:0000 0A 00000000:00000000 00:00000000 00000000  0  0 7411 1 ffff81002f448d00 3000 0 0 2 -1      
4: 0100007F:0019 00000000:0000 0A 00000000:00000000 00:00000000 00000000  0  0 7520 1 ffff81002f4486c0 3000 0 0 2 -1      
5: 0100007F:089F 00000000:0000 0A 00000000:00000000 00:00000000 00000000  0  0 7339 1 ffff81002f449340 3000 0 0 2 -1   
6: 0100007F:E753 0100007F:0016 01 00000000:00000000 02:000AFA92 00000000 500  0 18198 2 ffff81002f448080 204 40 20 2 -1     
7: 0100007F:E752 0100007F:0016 06 00000000:00000000 03:000005EC 00000000  0  0 0 2 ffff81000805dc00          

yukarıdaki gösterileri: satır sl 0 günü

  • : tcp/2208 tarihinde dinleme bağlantı noktasını. st = 0A = LISTEN
  • On line sl 6: tcp/22 üzerinde kurulu bir oturum. st = 01 = ESTABLISHED
  • On line sl 7: Ssh logosundan sonra TIME_WAIT durumunda bir soket. İnode yok. st = 06 = TIME_WAIT

Bu listeyi genişleten var mı? proc(5) manpage belirten konuda oldukça kısa ve öz:

/proc/net/tcp 
      Holds a dump of the TCP socket table. Much of the information is not of use apart from debugging. The "sl" value is the kernel hash slot for the socket, the "local address" is the local address and 
      port number pair. The "remote address" is the remote address and port number pair (if connected). ’St’ is the internal status of the socket. The ’tx_queue’ and ’rx_queue’ are the outgoing and incom- 
      ing data queue in terms of kernel memory usage. The "tr", "tm->when", and "rexmits" fields hold internal information of the kernel socket state and are only useful for debugging. The "uid" field 
      holds the effective UID of the creator of the socket. 

Ve ilgili bir not

, yukarıdaki/proc/net/tcp çıkışı birkaç dinleme süreçleri (2208, 62, 111 vb) gösteriyor. Ancak, kurulu ve time_wait durumları gösterildiğinde, tcp/22'de tcp bağlantısını dinlemiyorum. Evet, onları /proc/net/tcp6 numaralı sayfada görebiliyorum ama /proc/net/tcp da bulunmamalıdır? Netstat çıkışı, sadece ipv4'e bağlı olan uygulamalara farklı şekilde gösterir. Örneğin.

tcp  0  0 0.0.0.0:111     0.0.0.0:*     LISTEN  4231/portmap   
tcp  0  0 :::22      :::*      LISTEN  4556/sshd   

Çok teşekkürler, -Andrew

+0

Heres biraz daha [okuma] (http://www.readmespot.com/question/f/21657/semantics-of-----0-0-0-0-in-dual-stack- Herhangi biri ilgilenen varsa ipv4 ipv6 için oses) –

+0

Bu şimdi bir ölü bağlantıdır. Muhtemelen bu bağlantıya bağlı olduğunu düşünüyorum: http://serverfault.com/questions/21657/semantics-of-and-0-0-0-0-in-dual-stack-oses – user314104

cevap

27
Onlar Linux kernel kaynaklarında ./include/net/tcp_states.h yılında enum uymalıdır

: senin 2. soruya gelince

enum { 
    TCP_ESTABLISHED = 1, 
    TCP_SYN_SENT, 
    TCP_SYN_RECV, 
    TCP_FIN_WAIT1, 
    TCP_FIN_WAIT2, 
    TCP_TIME_WAIT, 
    TCP_CLOSE, 
    TCP_CLOSE_WAIT, 
    TCP_LAST_ACK, 
    TCP_LISTEN, 
    TCP_CLOSING, /* Now a valid state */ 

    TCP_MAX_STATES /* Leave at the end! */ 
}; 

size orada gerçekten emin örneğin bir sshd dinlemiyor 0.0.0.0:22? Değilse, gördüğünüzün v4 ile eşlenmiş v6 soketleri ile ilgili olduğundan şüpheleniyorum, bkz. man 7 ipv6

+0

Teşekkürler, neden bilmiyorum kaynağı vururken bunu yakalamadım. Sanırım EST'de eşleştirmeye çalışıyordum. 0016'da kesinlikle bir hizmet yoktur, bu yüzden söz ettiğiniz gibi v6 ile v4 arasında haritalama olması gerekir. Benim için yeni. –

+0

Ayrıca, hex değerlerini tcp_states.h'den nasıl alacağımı tam olarak bilmiyorum. Sadece ESTABLISHED'i, yukarıdaki gibi yapıştırılmış bir değere sahip olarak görebiliyorum, ancak diğer devletler nasıl çalıştı ve eşleştirildi? –

+2

bir numaradır ve 1 ile başlar. Örn. TCP_SYN_SENT 2, TCP_LISTEN 10'dur. Ondalık olarak 10, hex/hex/net/tcp içinde – nos