Linux系统下通过Socket文件描述符寻找连接状态

Proc虚拟文件系统下面有许多数字命名的子目录,这些数字表示系统当前运行的进程号;

其中/proc/N/fd目录下面保存了打开的文件描述符,指向实际文件的一个链接。如下:

[[email protected]_10_1_17_138 song_test]# ll /proc/25465/fd
total 0
lrwx------ 1 root root 64 Apr 14 09:36 0 -> /dev/pts/4 (deleted)
lrwx------ 1 root root 64 Apr 14 09:36 1 -> /dev/pts/4 (deleted)
lrwx------ 1 root root 64 Apr 14 09:36 10 -> socket:[2289128790]
lrwx------ 1 root root 64 Apr 14 09:36 100 -> socket:[2305227922]
lrwx------ 1 root root 64 Apr 14 09:36 101 -> socket:[2305224138]
lrwx------ 1 root root 64 Apr 14 09:36 102 -> socket:[2305233625]
lrwx------ 1 root root 64 Apr 14 09:36 103 -> socket:[2305215571]
lrwx------ 1 root root 64 Apr 14 09:36 104 -> socket:[2305243589]
lrwx------ 1 root root 64 Apr 14 09:36 105 -> socket:[2305394065]
lrwx------ 1 root root 64 Apr 14 09:36 106 -> socket:[2305394002]

我们想查看101 Socket文件描述符的链接状态该怎么看呢?聪明的注意到后面有个数字【2305224138】,这个数字又是哪儿来的呢?看客请往下看。

在/proc/net/tcp目录下面保存了所有TCP链接的状态信息。

[[email protected]_10_1_17_138 song_test]# cat /proc/net/tcp
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
   0: 8A11010A:7DC8 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 764789417 1 ffff881051dfcb40 99 0 0 10 -1
   1: 8A11010A:0369 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 737748331 1 ffff88106af8f7c0 99 0 0 10 -1
  51: 8A11010A:FAF4 9C01010A:0CEA 06 00000000:00000000 03:00000938 00000000     0        0 0 2 ffff8810516c01c0
  52: 8A11010A:21CD 0964010A:2227 01 00000000:00000000 00:00000000 00000000     0        0 2305224138 2 ffff8801402f55c0 23 3 30 10 -1
  53: 8A11010A:FB8A 9C01010A:0CEA 06 00000000:00000000 03:000012A8 00000000     0        0 0 2 ffff8810516c04c0
  54: 8A11010A:73E5 4511010A:0050 06 00000000:00000000 03:00000EA8 00000000     0        0 0 2 ffff88106898a880
  55: 8A11010A:89AD F300010A:1F90 08 00000000:00000001 00:00000000 00000000     0        0 2305271480 1 ffff880869b59740 23 3 0 10 -1
 187: 8A11010A:0ACB 8811010A:1F90 06 00000000:00000000 03:0000028E 00000000     0        0 0 2 ffff881050e9ccc0
 188: 8A11010A:FB6C 9C01010A:0CEA 06 00000000:00000000 03:000010CB 00000000     0        0 0 2 ffff88104fd8dd80

看上数字【2305224138】没有,就是这儿来的,到此我们可以找出链接的IP、PORT链接四元组【8A11010A:21CD 0964010A:2227】这个地方是用十六进制保存的,换算成十进制方式【10.1.17.138:8653            10.1.100.9:8743】;

去网络连接状态里面看一下:

[[email protected]_10_1_17_138 song_test]# netstat -ntp
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 10.1.17.138:64428           10.1.1.156:3306             TIME_WAIT   -
tcp        0      0 10.1.17.138:64244           10.1.1.156:3306             TIME_WAIT   -
tcp        0    166 10.1.17.138:8653            10.1.100.9:8743             ESTABLISHED 25465/./index_searc
tcp        0      0 10.1.17.138:64394           10.1.1.156:3306             TIME_WAIT   -
tcp        0      0 10.1.17.138:29669           10.1.17.69:80               TIME_WAIT   -
tcp        0      0 10.1.17.138:46336           10.1.17.68:80               TIME_WAIT   -
tcp        0      0 ::ffff:10.1.17.138:8080     ::ffff:10.1.17.136:27247    TIME_WAIT   -       

回到开始的问题:101 Socket文件描述符代表的是本地【10.1.17.138:8653】到【10.1.100.9:8743】的一条TCP连接!

时间: 2024-10-21 09:20:05

Linux系统下通过Socket文件描述符寻找连接状态的相关文章

并发时-修改Linux系统下的最大文件描述符限制

通常我们通过终端连接到linux系统后执行ulimit -n 命令可以看到本次登录的session其文件描述符的限制,如下: $ulimit -n1024 当然可以通过ulimit -SHn 102400 命令来修改该限制,但这个变更只对当前的session有效,当断开连接重新连接后更改就失效了. 如果想永久变更需要修改/etc/security/limits.conf 文件,如下:vi /etc/security/limits.conf* hard nofile 102400* soft no

Linux 套接字与文件描述符

端口和套接字,用于确定指定主机上的哪个本地进程使用了哪个协议和哪台远程主机上的哪个进程进行了通信.端口和套接字的使用可以基于以下几点: ①为每个应用过程分配一个过程标识符(Process ID),每次启动一个进程时,这个ID都可能是不同的. ②进程ID因操作系统平台不同而不同,因而它们是不统一的. ③一个服务器过程能够同时与多个客户连接,因而简单的连接标识符不可能是唯一的. 端口和套接字概念提供了一种以统一的方式唯一地标识连接以及参与连接的程序和主机的方法,而不管特定的过程ID. (1)端口 

read的返回值结论(针对于普通文件描述符和管道或socket文件描述符情况划分)

关于read函数的返回值分析: 情况一:(读取普通文件而言) 01.阻塞情况 read函数从打开的设备或文件中读取数据. read/write  (read和write函数会读取\n换行) #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); 函数参数: n  fd:文件描述符 n  buf:读上来的数据保存在缓冲区buf中 n  count:buf缓冲区存放的最大字节数 函数返回值: n  >0:读取的字节

Unix系统编程()文件描述符和打开文件之间的关系

目前学习到的是一个文件描述符对应着一个打开的文件,似乎是一一对应的关系.但是实际上并不是这样的.多个文件描述符指向同一个打开的文件,是可能的也是必要的.这些文件描述符可以在相同或者不同的进程中打开. 要理解具体情况,需要查看内核维护的3个数据结构. 进程级的文件描述符表 系统级的打开文件表 文件系统的i-node表 针对每个进程,内核为其维护打开文件的描述符(open file descriptor)表.该表的每一条目都记录了单个文件描述符的相关信息.包括有一下信息: 控制文件描述符操作的一组标

Linux培训教程 linux系统下分割大文件的方法

在linux中分割大文件,比如一个5gb日志文件,需要把它分成多个小文件,分割后以利于普通的文本编辑器读取. 有时,需要传输20gb的大文件,Linux培训 教程件到另一台服务器,也需要把它分割成多个文件,这样便于传输数据. 以下通过五个不同的例子,来讲解Linux下分割大文件的方法,供大家参考. 例1.以每个文件1000行分割 split命令分割文件成每个文件1000行,并且文件名依次为 [前缀]aa,[前缀]ab, [前缀]ac等,默认的前缀是X,每个文件的行数为1000行. 命令: 复制代

Linux系统下删除乱码文件或者目录,rm删除不了

Linux系统下解压zip或rar文件后可能会产生乱码文件或者目录,使用rm -rf fileName 无法删除,rm -rf 删除上一级目录可以,但是需要先备份,比较费时间, 其实可以根据索引节点(i节点) 进行删除. [[email protected] Ultra-OAS]# ll -i 总计 65344 1993345 drwxr-xr-x  2 root root     4096 04-21 10:05 -播?+?+?+垄+Ε (注:带分号结尾) #find ./ -inum 199

linux系统下导出MySQL文件

1.配置:从centOS6.5系统,MySQL数据库 2.导出.sql文件的命令: mysqldump -uroot -h116.228.90.147 -P18006 -p aimo > /home/aimo.sql 3.解释: I.mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等. II.-uroot -u后面紧跟用户名 III.-h116.228.90.147 -h后面紧跟IP地

Linux系统下查找大文件或目录的技巧

命令行如下 find . -type f -size +1000000k 当硬盘空间不够时,我们就很关心哪些目录或文件比较大,看看能否干掉一些了,怎么才能知道呢? #已易读的格式显示指定目录或文件的大小,-s选项指定对于目录不详细显示每个子目录或文件的大小 du -sh [dirname|filename] 如: 当前目录的大小: du -sh . 当前目录下个文件或目录的大小: du -sh * [[email protected] var]# du -sh *12K     account1

Linux系统下安装ISO文件

1.在/mnt目录下,创建相应的iso文件夹,例如cd1,cd2. 2.然后,用命令:mount -o loop /home/kinglu/Matlab/matlab1.iso(iso文件路径名) /mnt/cd1 3.此时,在/mnt/cd1目录下,就有相应的安装文件了,接下来安装就可以了. 注:以上操作在su root 后进行,需要root权限.