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的端口)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值