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 LISTEN 0.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 0 typedef 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; } }
結果顯示:
[[email protected] test]# gcc link.c
[[email protected] test]# ./a.out
111
902
25
631
22
48145
其他:
只能匹配tcp不可匹配tcp6的埠。
僅僅用命令獲取本機監聽的埠列表,包括tcp與tcp6。即不適用連結串列實現。見
相關推薦
netstat獲取本機監聽的地址列表 —— *連結串列實現*(sudo netstat -nl | grep -w tcp | awk '{print $4}')
問題描述: 獲取本機監聽的地址列表中,協議型別為tcp的埠。(sudo netstat -nl | grep -w tcp) 知識填充: 在linux一般使用netstat 來檢視系統埠使用情況步。 netstat命令是一個監控TCP/IP網路的非常
Linux雲主機獲取本機公網IP地址
forever linux ip地址 主機 因為公司的雲主機使用ifconfig和ip add命令都只能看到內網IP地址,而腳本裏面又需要獲取公網IP地址進行一些動作;# ip ad 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc
linux 獲取本機MAC/IP地址的方法
linunx 編程 mac 地址功能:查詢本機IP/MAC地址,過濾掉127.0.0.1 loop-back 地址適用:linux, ubuntu 16.04 調試通過#include <stdlib.h>#include <stdio.h>#include <unistd.h&
獲取本機的ip地址(排除虛擬機,藍牙等ip)
運行 exception play pla 過濾 contains network localhost static 項目中遇到了要獲取本地ip的需求,網上查找資料遇到很多坑,很多Java獲取本機ip地址的方法要麽是根本獲取不到,要麽是獲取的有問題。 網上常見的方法如下 I
使用Linux curl命令獲取本機公網IP地址
使用Linux curl命令獲取本機公共IP地址 在本教程中,我們將學習如何使用Linux curl命令查詢計算機的公共IP地址。 通常,如果我們想要找到我們使用的公共IP地址,我們會去谷歌並搜尋“我的IP地址是什麼”。但是如果使用Linux,則可以使用curl命令從命令列
C# 獲取本機的IP地址
控制檯命令程式: string name = Dns.GetHostName(); IPAddress[] ipadrlist = Dns.GetHostAddresses(name); foreach (IP
Android獲取本機藍芽地址
從Android6.0開始,通過BluetoothAdapter.getDefaultAdapter().getAddress()獲取的地址是一個固定值02:00:00:00:00:00,部分從低版本
cocos2dx獲取本機全部ip地址。。。
使用的是raknet中獲取網絡卡的方式,支援linux,ios,安卓系統。未支援win。 #if defined(ANDROID) void UdpSocket::getHostIpByString( char ipList[ MAXIMUM_NUMBER_OF_INT
Qt 獲取本機的IP地址、Mac地址
獲取IP地址 QString getHostIpAddress() { QString strIpAddress; QList<QHostAddress> ipAddres
Python獲取本機所有IP地址
眾所周知,Python標準庫socket中有可以獲取本機IPV4地址的方法,下面是網上非常常見的一種用法: >>> import socket >>> hostname = socket.gethostname() >>&g
Java獲取本機的ip地址
說到獲取ip地址,有人可能會想到,直接用InetAddress.getLocalHost().getHostAddress()。實際上這個是不對的,因為一臺機器上可能有多個網路介面(一般指網絡卡或者虛擬網絡卡),因此也就有多個ip地址,所以我們需要列出所有的網路介面及其對應
用java程式碼如何獲取本機的IP地址和主機名
InetAddress localhost = InetAddress.getLocalHost(); System.out.println ("localhost: "+localhost.get
獲取本機的公網IP和內網IP(JAVA原始碼)
public class Test { public static void main(String[] args) { try { String ip1 = getMyIP(); System.out.println("myIP:" + ip1);
使用sed獲取本機正在監聽的埠
今天依舊還是被SolrCloud給折磨著,Flume和Solr的表配置已經配置完畢,就是上傳不到zookeeper,一直顯示zookeeper超時連線,但是所有的配置已經按照文件上的寫好,為嘛不行呢?可是眼尖的我發現zookeeper的埠是5181,我記得預設的是2181,難道是為了安全配置成其他的了?但是我
c#中如何獲取本機MAC地址、IP地址、硬盤ID、CPU序列號等系統信息
finall ipaddress reac 地址 computer mod urn aca rop public class Computer { public static string CpuID; //1.cpu序列號 pub
獲取本機IP地址的小腳本
ash class p地址 nbsp 地址 int done 獲取本機 onf 獲取本機私網地址(1個) 1 #!/bin/bash 2 # Author : standby 3 # Date : 2017-05-18 4 # D
python-獲取本機mac地址
names iyu ddr repr pri int .get variant pac 1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 ############################ 4 #File N
js獲取本機的網絡IP地址
p地址 tput ack javascrip var function tel back element JavaScript是一門腳本語言,是不能操作文件,讀取本地信息的,所以想要獲取IP,還需要借助後端技術。方法如下: //獲取本機的網絡ip地址 function j
unity 獲取本機ip地址
ipa mil work get hostname [] 本機 取ip gethost IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName()); //Dns.GetHostName()獲取本機名Dns.GetH
獲取本機IP地址
down pos -m 兩個 div mar inter 獲取本機ip地址 work 問題描述 一臺電腦有IPV4地址和IPV6地址,目前使用的基本是IPV4地址, 有些情況還有多個網卡,有線的、無線的、還有vmare虛擬的兩個網卡。 獲取所有的IP地址 //獲取本機IP