linux - programacion - Lista de posibles estados de socket internos de/proc
manual de programacion android pdf (1)
Deben coincidir con la enumeración en ./include/net/tcp_states.h en las fuentes del kernel de Linux:
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! */
};
En cuanto a su 2. pregunta, ¿está realmente seguro de que no hay un sshd escuchando en, por ejemplo, 0.0.0.0:22? Si no, sospecho que lo que estás viendo está relacionado con los sockets v4-mapped-on-v6, ver, por ejemplo, man 7 ipv6
Me gustaría saber los posibles valores de la columna st
en /proc/net/tcp
. Creo que la columna st
equivale a la columna STATE de netstat(8)
o ss(8)
.
He logrado identificar tres códigos:
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
Lo anterior muestra:
- En la línea sl 0: un puerto de escucha en tcp / 2208.
st = 0A = LISTEN
- En la línea sl 6: Una sesión establecida en tcp / 22.
st = 01 = ESTABLISHED
- En la línea sl 7: Un socket en el estado TIME_WAIT después de ssh logout. No inodo
st = 06 = TIME_WAIT
¿Alguien puede ampliar en esta lista? La página de proc(5)
es bastante concisa sobre el tema y dice:
/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.
Y en una nota relacionada, la salida / proc / net / tcp anterior muestra algunos procesos de escucha (2208, 62, 111, etc.). Sin embargo, no puedo ver una conexión tcp de escucha en tcp / 22, aunque se muestran los estados establecidos y time_wait. Sí, puedo verlos en /proc/net/tcp6
pero, ¿no deberían estar presentes en /proc/net/tcp
también? La salida de Netstat lo muestra de manera diferente a las aplicaciones vinculadas solo a ipv4. P.ej
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 4231/portmap
tcp 0 0 :::22 :::* LISTEN 4556/sshd
Muchas gracias, -Andrew