日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

發布時間:2025/10/17 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 netstat获取本机监听的地址列表 —— *链表实现*(sudo netstat -nl | grep -w tcp | awk '{print $4}') 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述:

獲取本機監聽的地址列表中,協議類型為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}')的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。