IP位址匹配

2022-04-07 08:22:32 字數 2731 閱讀 1753

問題描述: 

在路由器中,一般來說**模組採用最大字首匹配原則進行目的埠查詢,具體如下:

ip位址和子網位址所帶掩碼做and運算後,得到的值與子網位址相同,則該ip位址與該子網匹配。

比如:192.168.1.100&255.255.255.0 = 192.168.1.0,則該ip和子網192.168.1.0匹配

子網:192.168.1.128/255.255.255.192

192.168.1.100&255.255.255.192 = 192.168.1.64,則該ip和子網192.168.1.128不匹配

最大字首匹配:

192.168.1.0可以表示為11000000.10101000.00000001.00000000

ip位址192.168.1.100,同時匹配子網192.168.1.0/255.255.255.0和子網192.168.1.64/255.255.255.192,

但對於子網192.168.1.64/255.255.255.192,匹配位數達到26位,多於子網192.168.1.0/255.255.255.0的24位,

因此192.168.1.100最大字首匹配子網是192.168.1.64/255.255.255.192。

請程式設計實現上述最大字首匹配演算法。

要求實現函式: 

void max_prefix_match(const char *ip_addr, const char *net_addr_array, int *n)

表現形式如上述,子網位址和子網掩碼用』/』分開,嚴格保證是

合法形式的字串;如果讀到空字串,表示子網位址列表結束

【輸出】n:最大字首匹配子網在*net_addr_array陣列中對應的下標值。如果沒有匹配返回-1

示例 輸入:

ip_addr = "192.168.1.100"

net_addr_array =

"192.168.1.128/255.255.255.192",

"192.168.1.0/255.255.255.0",

"192.168.1.64/255.255.255.192",

"0.0.0.0/0.0.0.0",

輸出:n = 2

這題真麻煩,搞了好久~分高就是難

1 #include2 #include3 #include

4void max_prefix_match(const

char *ip_addr, const

char *net_addr_array, int *n)523

if (*p == '\0'

)27 ip[l++] =j;

28 p++;29}

30 l = 0

;31 printf("

ip:\n");

32for (l=0; l < 4; l++)

33 printf("

%d "

,ip[l]);

34 printf("\n"

);35 l = 0;36

while (*net_addr_array[i] != '\0'

)3748 net[l++] =j;

49if (*p == '/'

)50break

;51 p++;52}

53 p++;

54 l = 0;55

while (*p != '\0'

)5664if (*p == '\0'

)68 mask[l++] =j;

69 p++;70}

71 printf("\n"

);72

for (l=0; l < 4; l++)

73 printf("

%d "

,net[l]);

74 printf("/ "

);75

for (l=0; l < 4; l++)

76 printf("

%d "

,mask[l]);

77 printf("

\ncal ip & mask:\n");

78for (l=0; l < 4; l++)

7990 temp = temp >> 1;91

}92}93

if (l >= 4)94

101}

102 sum = 0

;103 i++;

104 l = 0

;105 printf("\n"

);106

}107 printf("\n"

);108

}109

intmain()

110;

124int *n;

125 n = (int*)malloc(sizeof(int

));126

max_prefix_match(ip_addr, net_addr_array, n);

127 printf("

n = %d\n

",*n);

128129 }

匹配IP位址

正規表示式 25 0 5 2 0 4 0 9 0 1 0 9 1 9 0 9 1 9 25 0 5 2 0 4 0 9 0 1 0 9 1 9 0 9 1 9 0 25 0 5 2 0 4 0 9 0 1 0 9 1 9 0 9 1 9 0 25 0 5 2 0 4 0 9 0 1 0 9 1 9 ...

python匹配ip位址

ip位址是用3個 號作為分隔符,分割4個數字,每個數字的取值在 0,255 一般日誌檔案中的ip位址都是有效的ip位址,不需要我們再去驗證,因此,若從日誌檔案中提取ip,那麼可以簡單寫成這樣 import re s kkk 192.168.1.136 kkk 192.168.1.137 kk 192...

python IPy 匹配ip位址段

在ip位址規劃中,涉及到計算大量的ip位址,包括網段 網路掩碼 廣播位址 子網數 ip型別等 別擔心,ipy模組拯救你。ipy模組可以很好的輔助我們高效的完成ip的規劃工作。wget no check certificate tar zxvf ipy 0.81.tar.gz cd ipy 0.81 ...