1. 程式人生 > >bro框架-- 地理定位

bro框架-- 地理定位

原文地址:

在處理策略指令碼的時候可能需要知道一個ip地址所在的地理區位。Bro支援GeoIP庫。為了使用這個功能,您需要先安裝libGeoIP軟體,並在構建Bro之前安裝GeoLite city資料庫。

安裝libGeoIP:

在構建Bro之前需要安裝libGeoIP

FreeBSD:

sudo pkg install GeoIP

RPM/RedHat-based Linux:

sudo yum install GeoIP-devel

DEB/Debian-based Linux:

sudo apt-get install libgeoip-dev

Mac OS X:

從你喜歡的包管理系統中安裝(比如MaccPorts, Fink, Homebrew)。你所需要的包的名字可能是libgeoip, geoip, geoip-dev,這依賴於你所使用的管理系統。

GeoIPLite資料庫安裝:

下載GeoLite city binary database:

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

gunzip GeoLiteCity.dat.gz

檔案需要重新命名並且放在GeoIP資料庫目錄下。這個目錄應該已經存在,它會根據你使用的平臺和包而變化。對於FreeBSD而言,使用/usr/local/share/GeoIP。對於linux,使用/usr/share/GeoIP或者/var/lib/GeoIP(選擇存在的那個)。

mv GeoLiteCity.dat <path_to_database_dir>/GeoIPCity.dat

注意,有一個單獨為IPv6地址準備的資料庫,想要的話你也可以裝。

測試:

在使用GeoIP功能之前,先驗證一下裝的對不對。用下面的語句試一試。

bro -e "print lookup_location(8.8.8.8);"

如果你看到類似於“Failed to open GeoIP City database”的訊息,你可以嘗試重新命名或者移動你的GeoIP city資料庫檔案(錯誤資訊會給你Bro要找的資料庫檔案的完整路徑)。

如果你看到類似於“Bro was not configured for GeoIP support”的訊息,你可以嘗試重新構建Bro並保證它連線了libGeoIP。正常情況下,如果libGeoIP正確安裝了,它會在構建Bro的時候自動找到。如果這樣不行,你可以嘗試將路徑指向libGeoIP的安裝路徑(比如 ./configure --with-geoip=<path>)。

使用方法

有一個內建的函式提供GeoIP的功能:

function lookup_location(a:addr): geo_location

函式lookup_location的返回值是record型別geo_location,它由包含了一個ip地址的國家(country),地區(region),城市(city),緯度(latitude),經度(longitude)等資訊。這些值不一定全都有,所以在取值之前先驗證是否有這個值。

例子

從Ohio州的主機來的每個ftp連線,非常容易:

event ftp_reply(c: connection, code: count, msg: string, cont_resp: bool)

{

local client = c$id$orig_h;

local loc = lookup_location(client);

if (loc?$region && loc$region == "OH" && loc$country_code == "US")

{

local city = loc?$city ? loc$city : "<unknown>";

print fmt("FTP Connection from:%s (%s,%s,%s)", client, city,

loc$region, loc$country_code);

}

}