我想使用 netcat 来测试某些端口是否正在侦听,但是由于该命令将在语言不同于英语的机器上执行,因此grep
基于单词的输出并不是一个好主意LISTENING
(例如,我在德国电脑上看到了这个词ABHOREN
)。
我试图查看 netcat 的联机帮助页,但似乎找不到解决方案,所以我想知道是否有人设法将端口的状态转换为数字格式,而不是字符串。
提前致谢 :)
我想使用 netcat 来测试某些端口是否正在侦听,但是由于该命令将在语言不同于英语的机器上执行,因此grep
基于单词的输出并不是一个好主意LISTENING
(例如,我在德国电脑上看到了这个词ABHOREN
)。
我试图查看 netcat 的联机帮助页,但似乎找不到解决方案,所以我想知道是否有人设法将端口的状态转换为数字格式,而不是字符串。
提前致谢 :)
您可以在运行之前为 netcat 导出语言(甚至为整个脚本):
如果您说聆听,我猜您实际上想要
netstat
(不是netcat
)。大多数现代系统都知道netstat -lnt
哪些只列出了 LISTENING tcp 套接字,没有别的。注意在最小的 RHEL7 安装中没有 netstat - 它已被弃用,有利于ss
(相同的标志ss -lnt
但输出格式略有不同)。在一般情况下,答案是在环境中正确设置语言环境,这样所有进程都会用英语(或更好,C)与您交谈。
像
netstat
你可以直接问内核。它的信息来自/proc/net/tcp
和/proc/net/tcp6
。两个文件都以相同的方式格式化,并且比输出稍微(咳嗽)更难阅读netstat
,但与语言无关这是一个切碎的和稍微掩蔽的样本输出:
您在下面(本地端口)和列(状态)后面的十六进制中查看的
:
关键字local_address
段st
。内核源代码中提到了状态列
./include/net/tcp_states.h
,但有用的是有人在 StackExchange 上提出了这个问题:https ://stackoverflow.com/questions/5992211/list-of-possible-internal-socket-statuses-from-proc为了完整起见,我将在这里复制:
正如其中一个评论所述,这是一个状态,
enum
因此状态从 1 开始按顺序编号。大多数情况下,您正在寻找0A
(LISTENING) 和01
(ESTABLISHED)注意:为了找出 netstat 从哪里得到这些信息,我跑了
strace -e open,write netstat -an
.这里有更深入的字段标题:http ://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html