欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

netstat获取本机监听的地址列表 —— *awk与splite命令实现*(sudo netstat -nl | grep tcp……)

发布时间:2025/10/17 编程问答 58 豆豆
生活随笔 收集整理的这篇文章主要介绍了 netstat获取本机监听的地址列表 —— *awk与splite命令实现*(sudo netstat -nl | grep tcp……) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

问题描述:

校验某个端口是否被使用(80端口是否被使用):

1、获取本机监听的地址列表中,协议类型为tcp与tcp6的端口;

(sudo netstat -nl | grep tcp  | awk '{print $4}' | awk '{split($0,a,":");print a[2]a[4]}')

2、将获取到的列表中的值,与要被对比的监听的值(例如80值)向比较。

 代码实现:

#include <stdio.h> #include <string.h>#define MAX_BUF 1024*2*2 #define CHECK 1#define SUCCESS 0 #define PARAMETER_VALUE_ERROR 101 //参数值错误,不符合要求,如有边界值或选项参数/****************************************************************** 简述:获取本机的监听端口列表 参数:void 返回值:监听的端口列表,并以逗号分割,失败返回NULL 备注: *******************************************************************/ static int _authservice_Check_port(char *pcPort) {int i = 0; FILE *pf = NULL;char szListen[MAX_BUF] = {0};/* 使用popen获取本机地址 */pf = popen("sudo netstat -nl | grep tcp | awk '{print $4}' | awk '{split($0,a,\":\");print a[2]a[4]}'", "r");if(NULL == pf){return CHECK;}while(NULL != fgets(szListen, sizeof(szListen), pf)){ szListen[strlen(szListen) - 1] = '\0';printf("##%s##\n", szListen);if(!strncmp(pcPort, szListen, sizeof(pcPort))){return PARAMETER_VALUE_ERROR;}}return SUCCESS; }int main() {//端口的校验,0~65535 且不能有使用过的端口if(SUCCESS != (_authservice_Check_port("80"))){ return PARAMETER_VALUE_ERROR;}else{printf("Has not been used!\n"); //没有被使用}return SUCCESS; }

结果显示:

[root@J01051386 test]# gcc link1.c [root@J01051386 test]# ./a.out ##111## ##48145## ##22## ##631## ##25## ##902## ##111## ##22## ##631## ##25## ##43260## ##902## Has not been used!

其他:

链表实现的方式见:

netstat获取本机监听的地址列表 —— *链表实现*(sudo netstat -nl | grep -w tcp | awk '{print $4}')

注:(链表实现中,只能匹配tcp不可匹配tcp6的端口)

总结

以上是生活随笔为你收集整理的netstat获取本机监听的地址列表 —— *awk与splite命令实现*(sudo netstat -nl | grep tcp……)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。