问题描述:

获取本机监听的地址列表中,协议类型为tcp的端口。(sudo netstat -nl | grep -w tcp)

知识填充:

在linux一般使用netstat 来查看系统端口使用情况步。

netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的

netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作。

 该命令的一般格式为:netstat [选项]命令中各选项的含义如下:-a 显示所有socket,包括正在监听的。-c 每隔1秒就重新显示一遍,直到用户中断它。-i 显示所有网络接口的信息,格式同“ifconfig -e”。-n 以网络IP地址代替名称,显示出网络连接情形。-r 显示核心路由表,格式同“route -e”。-t 显示TCP协议的连接情况。-u 显示UDP协议的连接情况。-v 显示正在进行的工作。
一些使用实例:
1. netstat -an | grep LISTEN0.0.0.0的就是每个IP都有的服务,写明哪个IP的就是绑定那个IP的服务。2. netstat -tln用来查看linux的端口使用情况3. /etc/init.d/vsftp start是用来启动ftp端口~!4. netstat查看已经连接的服务端口(ESTABLISHED)5. netstat -a查看所有的服务端口(LISTEN,ESTABLISHED)6. sudo netstat -ap查看所有的服务端口并显示对应的服务程序名7.查看某个端口的连接数netstat -nat|grep -i "80"|wc -l

 代码实现:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define PARAMETER_VALUE_ERROR 101
#define IPV4_MAX_SIZE           16
#define PORT_MAX_SIZE           5
#define SUCCESS 0typedef struct st_waf_proxy_Listen
{char szListenIP[IPV4_MAX_SIZE + 1];char szListenPort[PORT_MAX_SIZE + 1];struct st_waf_proxy_Listen *pstNext;
}WAF_PROXY_LISTEN_LIST_S;/******************************************************************简述:   销毁host链表参数:WAF_PROXY_LISTEN_S *pstListen     单链表表头返回值:void备注:*******************************************************************/
static void _wafproxy_delete_ListenList(WAF_PROXY_LISTEN_LIST_S *pstListen)
{WAF_PROXY_LISTEN_LIST_S *pstTmp = NULL;while(NULL != pstListen){pstTmp = pstListen;pstListen = pstListen->pstNext;free(pstTmp);}return ;
}/******************************************************************简述:按格式解析获取的监听列表数据参数:void返回值:成功返回SUCCESS,失败返回PARAMETER_VALUE_ERROR备注:待解析字符串的形式为 0.0.0.0:22\n*******************************************************************/
static int _wafproxy_fmt_ListenList(const char *pcData, WAF_PROXY_LISTEN_LIST_S *pstListen)
{int i = 0;int iStrLen = 0;iStrLen = strlen(pcData);for(i = 0; i < iStrLen; i++){if(':' == pcData[i]){/* 跳过“:”取到port值 */strncpy(pstListen->szListenPort, &pcData[i + 1], iStrLen - (i + 1) - 1);break;}pstListen->szListenIP[i] = pcData[i];}return SUCCESS;
}/******************************************************************简述:获取本机的监听地址列表参数:void返回值:成功返回数据链表的地址,失败返回NULL备注:*******************************************************************/
static WAF_PROXY_LISTEN_LIST_S *_wafproxy_Get_ListenList(void)
{int i = 0;    FILE *pf = NULL;char szListen[IPV4_MAX_SIZE + 1 + PORT_MAX_SIZE + 1] = {0};WAF_PROXY_LISTEN_LIST_S *pstTmp       = NULL;WAF_PROXY_LISTEN_LIST_S *pstListenList = NULL;/* 使用popen获取本机地址 */pf = popen("sudo netstat -nl | grep -w tcp | awk '{print $4}'", "r");if(NULL == pf){return NULL;}while(NULL != fgets(szListen, sizeof(szListen), pf)){pstTmp = malloc(sizeof(*pstTmp));if(NULL == pstTmp){pclose(pf);_wafproxy_delete_ListenList(pstListenList);return NULL;}memset(pstTmp, 0 , sizeof(*pstTmp));_wafproxy_fmt_ListenList(szListen, pstTmp);if(NULL  == pstListenList){pstListenList = pstTmp;}else{pstTmp->pstNext = pstListenList->pstNext;pstListenList->pstNext = pstTmp;}}pclose(pf);return pstListenList;
}
int main()
{   WAF_PROXY_LISTEN_LIST_S *pstListen = NULL;WAF_PROXY_LISTEN_LIST_S *pstTmp    = NULL;/* 获取本机的监听列表 */pstListen = _wafproxy_Get_ListenList();if(NULL  == pstListen){return PARAMETER_VALUE_ERROR;}pstTmp = pstListen;/* 检查与本机的监听列表是否有冲突 */while(NULL != pstTmp){printf("%s\n", pstTmp->szListenPort);pstTmp = pstTmp->pstNext;}}

 结果显示:

[root@J01051386 test]# gcc link.c
[root@J01051386 test]# ./a.out
111
902
25
631
22
48145

其他:

只能匹配tcp不可匹配tcp6的端口。

仅仅用命令获取本机监听的端口列表,包括tcp与tcp6。即不适用链表实现。见

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

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

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

    问题描述: 校验某个端口是否被使用(80端口是否被使用): 1.获取本机监听的地址列表中,协议类型为tcp与tcp6的端口: (sudo netstat -nl | grep tcp  | awk ' ...

  2. Linux的ipv6不监听端口,netstat查看服务端口监听在ipv6但是通过ipv4地址可正常访问...

    在Linux系统中,会发现一个有趣的现象,通过 netstat 查看监听的服务端口时,发现有些服务 Proto(protocol协议) 项只显示了 tcp6(代表监听服务端口在IPv6协议), 没有 ...

  3. Oracle修改监听IP地址

    oracle 11g断网安装时,没有检测net的功能,所以安装完后,netstat -an 发现自动监听的是127.0.0.1:1521,这样安装完成后,其他的主机根本无法连接,是什么原因呢? 排错后 ...

  4. uniapp获取通知栏内容 监听通知栏信息

    uniapp获取通知栏内容 监听通知栏信息 简单介绍 插件地址 简单介绍 采用安卓原生SDK开发出来的一款安卓uniapp的插件,此插件只支持安卓,ios不支持. 监听通知栏内容,获取通知栏消息 安卓 ...

  5. python获取mac、计算机id_python 获取本机IP、mac地址、计算机名的简单示例

    这篇文章主要为大家详细介绍了python 获取本机IP.mac地址.计算机名的简单示例,具有一定的参考价值,可以用来参考一下. 对python获取本机IP.mac地址.计算机名感兴趣的小伙伴,下面一起 ...

  6. 获取运行端口监听的用户身份auth-owner

    获取运行端口监听的用户身份auth-owner Windows系统提供工作在TCP 113端口的授权服务(Authentication Service),用来判断TCP连接的用户.Nmap的auth- ...

  7. 获取本机的真实IP地址

    Code: import java.net.InetAddress; import java.net.UnknownHostException; /** * 获取本机的真实IP地址.<br> ...

  8. c#中如何获取本机用户名、MAC地址、IP地址、硬盘ID、CPU序列号、系统名称、物理内存...

    我们在利用C#开发桌面程序(Winform)程序的时候, 经常需要获取一些跟系统相关的信息, 以下这些代码获取能有些用处. c#中如何获取本机用户名.MAC地址.IP地址.硬盘ID.CPU序列号.系统 ...

  9. netstat linux查看监听端口号,linux用netstat查看服务及监听端口

    [root@localhost ~]# netstat -nlp netstat命令各个参数说明如下: -t : 指明显示TCP端口 -u : 指明显示UDP端口 -l : 仅显示监听套接字(所谓套接 ...

最新文章

  1. 【Android】Activity生命周期(亲测)
  2. javascript --- DOM0级、DOM2级、跨浏览器 的事件处理程序
  3. python ssl_Python3 ssl模块不可用的问题
  4. python 字符串交集_Python序列--集合(set)
  5. 9.特殊权限 软连接 硬链接
  6. ewsa 字典_湖南字典头条胖U
  7. 想用Python做自动化测试?Python反射机制的应用
  8. RedHat Linux设置yum软件源为本地ISO
  9. 使用systemd管理程序进程
  10. 如何下载STM32某型号MCU的数据手册(datasheet)
  11. 抖音内测语音直播交友 能够用声音打开社交的一扇门吗?
  12. 2021-08-01 Python嵩天MOOC学习笔记 第六周
  13. wifi 联想小新_联想小新如何开启wifi
  14. PS2018下载PSCC2018安装教程
  15. c语言中分号作用,在C语言中逗号、分号等的用法
  16. 「吕本富」交易的四个阶段
  17. 开源文档协作套件CryptPad
  18. 命令式和声明式,哪个才是你的菜
  19. 震惊世界的25张照片
  20. 【地理】从物理到地理之自然地理提纲整理2——大气圈

热门文章

  1. Java中的初始化顺序
  2. TThread深入分析
  3. elk7.2+filebeat
  4. rest_framework框架实现之(认证)
  5. setDAta 字符串拼接
  6. 【OpenCV学习笔记之一】图像加载,修改及保存
  7. 2017《面向对象程序设计》课程作业八
  8. 前序,中序,后序遍历
  9. iOS js oc相互调用(JavaScriptCore)(二)
  10. 今夜,我又坐在电脑面前想你