LoginSignup
3

More than 5 years have passed since last update.

IP範囲指定で/22とか/23を/24単位に分割するロジックをPython考えてみた

Last updated at Posted at 2016-08-16

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

実行結果
adc61fa5e5778d323d28c90526a81b6e.png

WindowsでPython… A(^_^;

後はZabbixAPIのを使って分割したIPを登録すれば良いわけで…

PythonでZabbixAPI実行するのは下記の記事を見ると簡単にできます。
PyhtonでZABBIX APIを触ってみる

記事にも書いてありますが、私も最初はpycurl使ってましたが、urllib2に切り替えました。A(^_^;

PythonでZabbixAPIを使う時、リクエスト用のxxx.jsonを作っておくと便利です。
そのファイルをjson.loadで読み、paramsのauthと各種パラメータを置き換えて投げれば言い訳でプログラム中でリクエストを全て書く必要がありません、便利ですね。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3