精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

算法題實戰 — 大規模黑名單IP匹配

安全 應用安全 算法
本文描述了我們公司在面試時常用的一道題目,雖然底層用了非常簡單的算法,但卻是具體工作中比較容易見到的場景:大規模黑名單 ip 匹配。同時用我們在安全網關中開發的例子來做些驗證。

算法是許多IT公司面試時很重要的一個環節,但也有很多人抱怨實際工作中很少碰到,實用性不高。本文描述了我們公司在面試時常用的一道題目,雖然底層用了非常簡單的算法,但卻是具體工作中比較容易見到的場景:大規模黑名單 ip 匹配。同時用我們在安全網關中開發的例子來做些驗證。

一、問題和場景

問題:有海量的 ip 網段名單,需要快速的驗證某一個 ip 是否屬于其中任意一個網段。

這其實是一個比較普遍的問題,以我們的安全網關為例,至少在以下場景中有需要:

場景一:單純的黑白名單匹配

對于網關來說,黑白名單匹配是基本功能:

  • 內部 ip 需要白名單 bypass。按照公司的規模和地域所在,這里可能會有大量的白名單。
  • 攻擊 ip 需要黑名單 block。目前的互聯網,各種掃描和攻擊還是比較猖獗的,可以很容易的獲得大量黑名單 ip,需要進行實時封禁。
  • 類似的可以參考 nginx 的黑名單功能,通過 deny 語句 "deny 192.168.1.0/24;" 可以定義一批 ip 網段,用來做訪問控制。

場景二:真實ip獲取

真實 ip 獲取對有些網站來說其實是一個比較麻煩的問題,因為流量可能有不同的來源路徑:

  • 瀏覽器-->網關。這種直接取 remote_address, 即 tcp 的遠端地址;
  • 瀏覽器-->lb-->網關。中間可能有別的負載均衡,一般靠 XFF 頭來識別;
  • 瀏覽器-->cdn-->lb-->網關。有些流量走了 cdn 或者云 waf,需要對 XFF 頭特別處理,識別出 cdn 的 ip;
  • 瀏覽器-->cdn-->lb-->...-->lb-->網關。實際場景中,受到重定向,內部多層網關的影響,可能會有比較復雜的場景。

類似的可以參考 nginx 的真實 ip 功能, 原理也比較簡單,通過類似 "set_real_ip_from 192.168.1.0/24;" 的語句可以設置內部 ip 名單,這樣在處理 XFF 頭的時候,從后往前找,遞歸模式下尋找第一個不是內部 ip 的值,即真實 ip。這就回歸到本文的問題上來。

場景三:流量標注

這部分功能常由后端的業務模塊自行實現,我們在開發產品中希望能在請求進來的時候做一些自動標注,減輕后端的負擔,比較有用的如:

  • ip 歸屬地判斷。ip 歸屬地一般是由數十萬網段組成的索引,需要進行快速判斷;
  • 基站標注。目前大量使用 4g 上網,所以基站 ip 必須小心對待,而基站數據也是大量的 ip 網段;
  • 云服務器標注。目前較多的攻擊來自于云服務器,這些標注對后臺的安全和風控業務有協助。云服務器列表也通過海量 ip 網段列表來展現。

以上場景描述了海量 ip 網段列表匹配的一些應用場景,還是比較容易碰到的。

二、算法描述

算法一: hashmap

絕大部分人第一反應是通過 hashmap 來做匹配,理論上可以實現(將網段拆分為獨立的 ip),但基本不可用:

  • 網段的掩碼不一定是24位,可以是32內的任一數字,所以如果要保證普遍性的話,需要完全拆成獨立的 ip;
  • 哪怕是真實 ip 獲取這樣常見的場景,我們在客戶這邊碰到,由于使用了多家 cdn 廠家,cdn 網段有1300+,假設都為24位掩碼的 c 類地址,也會有332800+的 ip,做成 hashmap 將是大量的內存開銷;
  • 由于網關一般是通過多進程或者多實例做水平擴展的,這個內存浪費也會成倍增加。

所以 hashmap 的方式所以查詢高效,但在實現層來說不太可行。

算法二:對網段列表進行順序匹配

目前可以看到一些開源的實現大都采用這種方式,比如場景段落描述的 nginx 兩個功能模塊,可以再 accss 模塊和 realip 模塊發現都是將配置存儲為 cidr 列表,然后逐個匹配;另外一個實現是 openresty 的 lua-resty-iputils 模塊,這個代碼看起來比較直觀些:

  1. local function ip_in_cidrs(ip, cidrs) 
  2.  local bin_ip, bin_octets = ip2bin(ip) 
  3.  if not bin_ip then 
  4.  return nil, bin_octets 
  5.  end 
  6.  for _,cidr in ipairs(cidrs) do 
  7.  if bin_ip >= cidr[1] and bin_ip <= cidr[2] then 
  8.  return true 
  9.  end 
  10.  end 
  11.  return false 
  12. end 

開源的實現在應付絕大多數簡單場景足夠可用,但后面的測試可以看到,當ip網段數量上升的時候,性能還是欠缺。

算法三:二分查找

實際的算法其實很簡單,二分查找即可,假設這些 ip 網段都是互不相鄰的,采用類似 java 的二分查找即可,如圖:

假設有 A, B, C, D 四個互不相鄰的 ip 網段,每個網段可以轉化為兩個數字:起始ip的整型表示和終止 ip 的整型表示;比如 0.0.0.0/24 可以轉化為 [0, 255]。這樣四個網段轉化為 8 個數字,可以進行排序,由于網段是互不相鄰的,所以一定是圖上這種一個 ip 段接一個 ip 段的情形。這樣匹配的算法會比較簡單:

  • 將被查詢 ip 轉化為數字,并在數組中進行二分查找;
  • 參考 java 的二分實現,當查詢命中時,直接返回命中數字的index;當查詢未命中時,返回一個負數,其絕對值表示了其插入位置(具體實現需略作變化,這里略過不計);
  • 第二步如果返回值為正數,恭喜你,找到了,直接命中;
  • 第二步如果返回的為負數,同時插入坐標為奇數(1, 3, 5, 7),說明插入點正好在一個網段之內,說明命中;
  • 第二步如果返回的為負數,同時插入坐標為偶數(0, 2, 4, 6, 8),說明插入點正好在兩個網段之間,說明此 ip 與所有網段都不命中;
  • 證畢收工。

所以整個算法非常簡單,不過這里假設了網段之間是互不相鄰的,這個很容易被忽視掉,下面做一些簡單說明。

任意兩個網段 A 和 B,可能有三種關系:

  • 完全不相鄰。A 和 B 沒有任何重復的部分。
  • 相包含,即 A 包含 B 或 B 包含 A。這種情形在數據預處理的時候可以發現并排除掉(只保留大的網段)。
  • A 和 B 相交,但并不包含。即兩個網段存在相互交錯的情形,下面通過圖形說明此種情況不成立。

上圖描述了任意兩個網段:

  • "*"表示掩碼
  • 兩個網段,共32位,其中子網部分,前面 X 個連續 bit 是相同的
  • 第一個網段剩余 Y 個 bit,第二個網段剩余 Z 個 bit

所以:

  • 假設 Y == Z == 0, 表示兩個網段完全相等,否則
  • Y == 0 && Z != 0, 說明第一個網段包含第二個網段;Y != 0 && Z == 0, 則第二個網段更大
  • Y != 0 && Z != 0,就是圖上的直觀表示,由于網段中的 ip 只能是*號部分的變化,所以兩個網段不可能有相同的 ip,因為中間至少有幾位是不同的

因此,如果對原始數據進行一定的預處理,二分查找是安全有效的方式。

三、測試數據

最近手機出的有點多,我們也跟風跑個分:

  • 測試采用 Raspberry Pi 3 Model B, 4核 1.2GHz CPU, 1G 內存。
  • 通過 wrk 進行持續30s,50個連接的性能測試。

測試一:基準測試

  1. Running 30s test @ http://10.0.0.5/ 
  2. 12 threads and 50 connections 
  3. Thread Stats Avg Stdev Max +/- Stdev 
  4. Latency 6.54ms 4.80ms 194.75ms 99.29% 
  5. Req/Sec 617.22 56.76 1.05k 80.42% 
  6. Latency Distribution 
  7. 50% 6.22ms 
  8. 75% 6.99ms 
  9. 90% 7.78ms 
  10. 99% 10.74ms 
  11. 221915 requests in 30.10s, 40.62MB read 
  12. Requests/sec: 7373.42 
  13. Transfer/sec: 1.35MB 

測試二:10000個黑名單+hashmap

  1. Running 30s test @ http://10.0.0.5/block_ip_1w 
  2. 12 threads and 50 connections 
  3. Thread Stats Avg Stdev Max +/- Stdev 
  4. Latency 7.75ms 2.34ms 94.11ms 85.57% 
  5. Req/Sec 512.72 68.86 780.00 74.28% 
  6. Latency Distribution 
  7. 50% 7.21ms 
  8. 75% 8.36ms 
  9. 90% 10.63ms 
  10. 99% 14.07ms 
  11. 184298 requests in 30.09s, 32.16MB read 
  12. Requests/sec: 6125.35 
  13. Transfer/sec: 1.07MB 

測試三:10000個黑名單+lua-resty-utils 模塊順序查找

  1. Running 30s test @ http://10.0.0.5/block_iputils_1w 
  2. 12 threads and 50 connections 
  3. Thread Stats Avg Stdev Max +/- Stdev 
  4. Latency 162.93ms 100.27ms 1.96s 95.22% 
  5. Req/Sec 27.47 12.28 150.00 66.46% 
  6. Latency Distribution 
  7. 50% 155.88ms 
  8. 75% 159.40ms 
  9. 90% 161.54ms 
  10. 99% 670.13ms 
  11. 9164 requests in 30.09s, 1.60MB read 
  12. Socket errors: connect 0, read 0, write 0, timeout 11 
  13. Requests/sec: 304.52 
  14. Transfer/sec: 54.41KB 

測試四:10000個黑名單+二分查找

  1. Running 30s test @ http://10.0.0.5/block_ipcidr_bin_1w 
  2. 12 threads and 50 connections 
  3. Thread Stats Avg Stdev Max +/- Stdev 
  4. Latency 9.60ms 6.78ms 196.80ms 97.53% 
  5. Req/Sec 427.92 82.80 0.89k 60.15% 
  6. Latency Distribution 
  7. 50% 8.45ms 
  8. 75% 10.94ms 
  9. 90% 12.55ms 
  10. 99% 18.58ms 
  11. 153892 requests in 30.10s, 26.85MB read 
  12. Requests/sec: 5112.69 
  13. Transfer/sec: 0.89MB 

☞ 通過測試數據,可以看到二分搜索可以達到接近于基于 hash 的性能,但內存消耗等會少很多;而簡單的順序遍歷會帶來數量級的性能下降。

【本文是51CTO專欄機構“豈安科技”的原創文章,轉載請通過微信公眾號(bigsec)聯系原作者】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2018-06-10 09:04:28

2011-06-02 10:52:11

Android BroadCast 黑名單

2011-01-21 17:53:44

Zimbra

2013-08-27 10:56:24

2015-06-04 11:11:15

2010-11-11 13:20:41

2010-05-24 13:36:11

2014-11-12 14:41:03

TurboMail

2009-10-29 08:39:14

Windows 7系統激活

2011-07-28 11:10:58

2011-03-18 13:14:01

2014-06-06 09:38:22

工信部應用軟件黑名單

2009-05-14 09:11:49

歐盟反壟斷黑名單

2010-11-01 09:17:21

超級黑名單騰訊QQ360安全中心

2012-11-23 17:13:59

2017-07-18 09:15:23

Python Craw數據爬取

2010-01-21 11:44:41

垃圾郵件實時黑名單技術

2012-11-23 10:15:06

2025-08-26 08:24:04

2013-02-25 09:37:38

點贊
收藏

51CTO技術棧公眾號

亚洲成人中文字幕在线| 朝桐光av在线| jizz免费一区二区三区| 国产精品久久久久久久久免费丝袜 | 日韩激情中文字幕| 久久亚洲成人精品| 国产精品第七页| 日韩专区视频网站| 婷婷亚洲久悠悠色悠在线播放| 欧美综合激情| 亚洲国产成人一区二区| 日韩黄色小视频| 欧美激情一区二区三区成人| 人妻视频一区二区| 亚洲视频三区| 欧美日韩三级一区| 337p粉嫩大胆噜噜噜鲁| 国产调教视频在线观看| ww久久中文字幕| 亚洲一区美女视频在线观看免费| 日韩视频在线观看一区| 女人色偷偷aa久久天堂| 国产亚洲欧洲高清一区| 日本一区二区在线观看视频| 免费一区二区三区四区| 欧美日韩视频在线| 好吊色视频988gao在线观看| 1pondo在线播放免费| 91丝袜国产在线播放| 91手机在线视频| 中日精品一色哟哟| 免费在线亚洲| 午夜伦理精品一区| 婷婷色中文字幕| 亚洲mv大片欧洲mv大片| 中文字幕日韩av电影| 日韩在线免费观看av| 盗摄牛牛av影视一区二区| 欧美精品在线观看播放| 国产自偷自偷免费一区 | 国产精品国内免费一区二区三区| 日韩成人激情视频| 欧产日产国产精品98| 日韩一区二区三区精品视频第3页| 欧美优质美女网站| 日韩av一二三四| 爱情电影社保片一区| 黄色成人在线播放| 国产69精品久久久久999小说| 精精国产xxxx视频在线中文版| 亚洲欧洲精品一区二区三区| 一区二区三视频| 一广人看www在线观看免费视频| 国产色产综合色产在线视频| 欧美精品二区三区四区免费看视频| 日韩中文字幕观看| youjizz国产精品| 精品免费一区二区三区蜜桃| 在线观看xxx| www一区二区| 欧美日韩综合另类| 久久精品a一级国产免视看成人 | 欧美18视频| 日韩黄色影片| 日本一区二区三级电影在线观看| 欧美一区三区二区在线观看| 最新国产在线观看| 亚洲视频中文字幕| 日韩精品一区二区在线视频| 岛国av在线网站| 色综合激情五月| www.夜夜爽| 久久九九精品视频| 精品国产百合女同互慰| 中文字幕在线播放视频| 伊人久久大香线蕉无限次| 亚洲性无码av在线| 欧美丰满熟妇bbbbbb| 国产精品www.| 亚州成人av在线| 日本免费精品视频| 国内一区二区视频| 国产精品一区二区三区免费| 飘雪影院手机免费高清版在线观看 | 极品尤物一区二区| 91精品国产成人观看| 久久全球大尺度高清视频| 久久久免费高清视频| 青青草一区二区三区| 91免费版网站入口| 香蕉久久国产av一区二区| 欧美国产丝袜视频| 日本香蕉视频在线观看| videos性欧美另类高清| 欧美精品自拍偷拍| 内射中出日韩无国产剧情| 国产剧情一区| 欧美激情精品久久久| 波多野结衣二区三区| 国产精品影视在线| 欧洲精品久久| 免费电影视频在线看| 色老头久久综合| 无码国产精品久久一区免费| 国产成人一区| 欧美精品videossex性护士| 岛国av中文字幕| 国产成人精品网址| 日韩jizzz| 国产理论在线| 91精品婷婷国产综合久久| 国产精品1000部啪视频| 欧美福利影院| 国产日韩av在线播放| 手机福利小视频在线播放| 亚洲免费观看高清完整| 性欧美极品xxxx欧美一区二区| 亚洲视频国产精品| 日韩中文字幕在线视频| www.com国产| 国产成a人亚洲精| 一本一道久久a久久精品综合 | 色综合天天综合网天天狠天天| 国产高清999| 欧美性感美女一区二区| 97av在线视频| 少妇人妻精品一区二区三区| 亚洲黄色免费电影| 最新av免费在线观看| 国产真实有声精品录音| 91福利视频网| 手机看片国产1024| 亚洲一区二区三区三| 激情久久综合网| 欧美3p视频| 国产精品免费一区二区三区都可以 | 国产香蕉在线视频| 国产成a人亚洲| 青青草免费在线视频观看| 日韩在线你懂得| 中国china体内裑精亚洲片| 日韩电影在线观看一区二区| 91一区二区在线| 久久久久免费看黄a片app| av成人男女| 欧美日韩第一视频| 性欧美18一19性猛交| 伊人一区二区三区| 亚洲av无码久久精品色欲| 欧美欧美全黄| 成人免费在线一区二区三区| 青青草原av在线| 亚洲第一区中文99精品| 在线观看精品国产| www国产成人免费观看视频 深夜成人网| 免费人成在线观看视频播放| 亚洲精品福利| 69精品小视频| 欧美日韩国产综合视频 | 国产一区二区三区视频免费观看| 国产精品久久免费看| 久久久久xxxx| 亚洲一级电影| 蜜桃久久精品乱码一区二区 | 91麻豆精品国产无毒不卡在线观看| 精品一区二区在线观看视频| 美女视频黄a大片欧美| 亚洲三区在线| 婷婷视频一区二区三区| 91精品国产91久久| 每日更新av在线播放| 欧美图片一区二区三区| 黑人操日本美女| 成人永久aaa| 日本一本二本在线观看| 久久综合88| 99re在线观看视频| 欧美久久天堂| 色婷婷av一区二区三区久久| 亚洲国产精彩视频| 懂色aⅴ精品一区二区三区蜜月| 国产 欧美 在线| 狠狠色丁香久久婷婷综合_中| 亚洲色成人www永久在线观看 | 正在播放一区| 精品三级av| 国产精品网红直播| 国产盗摄一区二区| 国产亚洲一区精品| 亚洲成熟女性毛茸茸| 色综合婷婷久久| 九九九免费视频| 久久久国产精华| 交换做爰国语对白| 男人天堂欧美日韩| 久久天天东北熟女毛茸茸| 日韩人体视频| 91麻豆国产语对白在线观看| 国产日韩电影| 欧美巨乳在线观看| 国产三区四区在线观看| 日韩欧美你懂的| 日韩欧美国产另类| 亚洲在线成人精品| 一级片黄色录像| 91免费国产在线观看| 亚洲一二三不卡| 丝瓜av网站精品一区二区| 日韩视频 中文字幕| 波多野结衣一区| 精品中文字幕人| 亚洲日本一区二区三区在线| 国产精品欧美风情| 成人国产电影在线观看| 操日韩av在线电影| 在线视频自拍| 亚洲香蕉成视频在线观看| 视频污在线观看| 日韩免费一区二区| 91 中文字幕| 一本色道a无线码一区v| 国产大片中文字幕在线观看| 亚洲欧美一区二区在线观看| 欧美熟妇激情一区二区三区| 91年精品国产| 久久久久成人精品无码中文字幕| 国产麻豆视频精品| 男生操女生视频在线观看| 日韩中文欧美在线| 日韩网址在线观看| 亚洲激情网址| www.av毛片| 欧美日本三区| 男人草女人视频| 亚洲在线久久| 51xx午夜影福利| 91tv官网精品成人亚洲| 一级日韩一区在线观看| 日韩精品dvd| 性欧美.com| 日韩电影一区| 天堂精品视频| 日韩精品2区| 在线看视频不卡| 欧美gayvideo| 伊人久久大香线蕉av一区| 日韩精品欧美| 综合久久国产| 综合视频在线| 日韩精品久久一区二区| 一区二区影院| 热久久最新网址| 国内久久视频| 久久国产精品网| 亚洲看片一区| www.中文字幕在线| 久久精品人人| 美女少妇一区二区| 久久国产精品第一页| 午夜不卡福利视频| 国产精品一二三在| 色综合久久久无码中文字幕波多| 精彩视频一区二区| 色哟哟免费视频| 丁香网亚洲国际| 精品中文字幕在线播放| 久久色视频免费观看| a资源在线观看| 亚洲视频资源在线| 国产一级片久久| 色综合久久综合网97色综合| 超碰在线97观看| 91精品国产aⅴ一区二区| 韩国av永久免费| 亚洲人成在线播放| 日韩黄色影院| 久久久久久久久中文字幕| 伊人成综合网站| 国产欧美久久一区二区| 精品视频一二| 久久伊人资源站| 99久久综合| 欧美深夜福利视频| 蜜桃久久精品一区二区| 中文字幕久久久久久久| www久久久久| 五月天丁香激情| 日韩欧美中文字幕在线播放| 国产乱码久久久久| 日韩精品视频免费| 欧美午夜电影一区二区三区| 国内精品免费午夜毛片| 国产精品亚洲d| 国产高清精品一区| 日韩欧美不卡| 欧美视频在线观看网站| 青草av.久久免费一区| 精品人妻一区二区免费| 国产精品色在线| 日韩欧美亚洲视频| 6080午夜不卡| 黄色网址在线播放| 久久久久久噜噜噜久久久精品| av在线不卡精品| 久久精品五月婷婷| 欧美激情一区| 日本人69视频| 久久亚洲春色中文字幕久久久| 欧美卡一卡二卡三| 欧美亚洲国产bt| 日韩一二三四| 欧美激情小视频| 亚洲我射av| 日本婷婷久久久久久久久一区二区| 黄色日韩在线| 三级黄色片播放| 国产精品国产三级国产aⅴ无密码| 国产区在线观看视频| 日韩精品中文字幕一区| 欧美极品视频| 国产精品久久久久久久久免费 | 亚洲国产91色在线| av网站在线免费| 国产精自产拍久久久久久| 竹菊久久久久久久| av高清在线免费观看| 国产精品综合av一区二区国产馆| 99自拍偷拍视频| 在线视频一区二区免费| 无码精品人妻一区二区三区影院 | 国产一级一片免费播放| 91精品国产91热久久久做人人| 触手亚洲一区二区三区| 欧美一级在线亚洲天堂| 国产一区二区三区亚洲| 男女裸体影院高潮| 国产在线观看免费一区| 香蕉成人在线视频| 欧美日韩一区不卡| 91在线视频| 国产精品亚洲自拍| 成人精品久久| 手机av在线网| 亚洲欧美一区二区视频| 国产乱码久久久久| 欧美成人中文字幕| 欧美高清一级片| 日韩精品综合在线| 不卡视频在线看| 在线观看亚洲天堂| 亚洲欧美国产一区二区三区| 电影网一区二区| 五月天丁香综合久久国产| 青娱乐精品在线视频| 成人无码精品1区2区3区免费看| 欧美日韩视频一区二区| 蜜桃av在线免费观看| 国产精品一区二区3区| 午夜久久免费观看| 久久久久亚洲av无码专区首jn| 亚洲影视在线播放| 亚洲欧美自偷自拍| 国产精品69av| 小处雏高清一区二区三区| wwwxxx色| 午夜精品一区二区三区电影天堂| 三级无遮挡在线观看| 国产精品h在线观看| 97精品在线| aaa黄色大片| 色综合久久中文综合久久牛| 色影视在线观看| 99电影在线观看| 欧美亚洲免费| 992在线观看| 精品国产sm最大网站| 日本高清不卡一区二区三区视频 | 日韩和欧美一区二区| 天天鲁一鲁摸一摸爽一爽| 精品美女一区二区三区| 中国字幕a在线看韩国电影| 亚洲欧美日韩精品久久久| 国产精品一区二区果冻传媒| 丰满少妇乱子伦精品看片| 中文字幕视频在线免费欧美日韩综合在线看| www.成人在线.com| 国产av麻豆mag剧集| 国产精品网站在线| 成人午夜免费在线观看| 国产精品电影观看| 欧美区国产区| 国产1区2区在线观看| 日韩精品中文字幕一区二区三区 | 精品国产乱码久久久久久牛牛| 成人自拍av| 国产精品一色哟哟| 国产精品久久久久精k8| 天堂在线中文| 91色视频在线导航| 视频一区二区三区中文字幕|