OSC2015Tokyo/Springでセミナー「全自動Zabbix」を聞いて、ネットアークディスカバリを広いレンジで登録すると探索に時間がかかるので、分割して登録した方がよいと言うお話が…
でも、「レンジを計算して分割するのめんどうだなー」っと…
と言う訳でPythonの勉強がてらIP範囲指定で/22とか/23を/24単位に分割するロジックを考えてみました。
IP分割するロジックです。
これロジックテストなので、変数名とか適当です。(言い訳)
きたないですねーA(^_^;
import sys
io = sys.argv[1]
tmp = io.split("/")
ip = tmp[0]
prefix = tmp[1]
tmp = ip.split(".")
o1 = tmp[0]
o2 = tmp[1]
o3 = tmp[2]
o4 = tmp[3]
sum = (int(o1) << 24 | int(o2) << 16 | int(o3) << 8 | int(o4) ) & 0xFFFFFF00
sum = sum >> (32-int(prefix))
sum = sum << (32-int(prefix))
for i in range(0, 2 << (24 - int(prefix) - 1)):
a = sum | i<<8
o1 = (a & 0xFF000000) >> 24
o2 = (a & 0x00FF0000) >> 16
o3 = (a & 0x0000FF00) >> 8
o4 = 0
a = str(o1) + "." + str(o2) + "." + str(o3) + "." + str(o4) + "/24"
print a
WindowsでPython… A(^_^;
後はZabbixAPIのを使って分割したIPを登録すれば良いわけで…
PythonでZabbixAPI実行するのは下記の記事を見ると簡単にできます。
PyhtonでZABBIX APIを触ってみる
記事にも書いてありますが、私も最初はpycurl使ってましたが、urllib2に切り替えました。A(^_^;
PythonでZabbixAPIを使う時、リクエスト用のxxx.jsonを作っておくと便利です。
そのファイルをjson.loadで読み、paramsのauthと各種パラメータを置き換えて投げれば言い訳でプログラム中でリクエストを全て書く必要がありません、便利ですね。