1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SplunkでCIDR(IPアドレス/ネットマスクまたは プレフィックス)からネットワークアドレスを計算

Posted at

What's new?

「SplunkのSPL(サーチ文)で、IPアドレスとネットマスク(例: 192.0.2.17/255.255.255.240)や、IPアドレスとプレフィックス(例: 192.0.2.17/28)から、手軽にネットワークアドレスを計算できたらいいのに!」
という願いを叶える、外部コマンドlookupを作成しました。

使い方:

(ここに任意のサーチを記載)
| lookup local=t ipcalclookup Address as ここにCIDR表記のIPアドレス値を持つフィールドを記載 OUTPUT Network Netmask Prefix Broadcast
  • ここでいう「CIDR表記のIPアドレス値」とは、以下のような形式
    • 192.0.2.17/255.255.255.240 (IPアドレス/サブネットマスク)
    • 192.0.2.30/28 (IPアドレス/プレフィックス)
    • 2001:db8:1234::1/64 (IPv6アドレス/プレフィックス)

使用例1:

| makeresults
| eval ip="192.0.2.17/255.255.255.240"
| lookup local=t ipcalclookup Address as ip OUTPUT Network Netmask Prefix Broadcast
| table ip Network Netmask Prefix Broadcast

ipcalclookup_result_example1.png

どう便利なの?

Splunkにはビルドインのeval関数である ipmask(<mask>,<ip>)という一見使えそうな関数があるのですが
実はこれがあまり使い勝手が良くないため、代替策としてこの ipcalclookup を利用できます。

ipmaskの使用例:

| makeresults
| eval ip="192.0.2.17"
| eval Network=ipmask("255.255.255.240",ip)
| table ip Network

ipmask_result_example.png

ipmaskの残念な点:

  • 第一引数にフィールド名を渡せない。つまり、マスク値として固定文字列を指定する必要があるため、行ごとにマスク値が異なるようなサーチ結果から、それぞれネットワークアドレスを算出するようなことができない。
  • ネットワークアドレスはわかるが、ネットマスク⇔プレフィックスの相互変換ができない。
  • IPv6アドレスに対応していない。

今回ご紹介する外部コマンドlookup ipcalclookup であれば、以上の残念な点をすべてカバーできます。

使用例2:

| makeresults
| eval ip=split("192.0.2.17/255.255.255.240,192.0.2.30/28,2001:db8:1234::1/64",",")
| mvexpand ip
| lookup local=t ipcalclookup Address as ip OUTPUT Network Netmask Prefix Broadcast
| table ip Network Netmask Prefix Broadcast

ipcalclookup_result_example2.png

活用例

ネットマスク⇔プレフィックスの変換

例えば、SNMPで取得したルータやL3スイッチのインタフェース情報は、IPアドレス、ネットマスクの情報を含んでいます。
一方、Splunkのlookupで、CIDRマッチを利用するためには、「IPアドレス/プレフィックス」の形式でルックアップファイルを記載する必要があります。
ネットマスクからプレフィックスへ変換することが容易にできれば、インタフェース情報のログから、CIDRマッチ用のルックアップファイルを自動作成する際のサーチが簡潔になります。

同一ネットワークかどうかの識別に利用

たとえば、以下の3つのIPアドレスが、同じネットワークに所属しているかどうか判断する場合、

  • 192.0.2.17/28
  • 192.0.2.30/28
  • 192.0.2.33/28

それぞれのネットワークアドレスを容易に計算できれば、ネットワークアドレスの値の違いで判断することができます。

使用例3:

| makeresults
| eval ip=split("192.0.2.17/28,192.0.2.30/28,192.0.2.33/28",",")
| mvexpand ip
| lookup local=t ipcalclookup Address as ip OUTPUT Network
| stats values(ip) as ip by Network

ipcalclookup_result_example3.png

インストール方法

上記の外部コマンドlookupを利用するには、Splunkbaseから以下の無償Appをご使用中のSplunkのサーチヘッドへインストールします。
インストール後、すぐに上記lookupが使用可能になります。

Numeral system macros for Splunk

以下の方法でも導入できます。
ご利用中のSplunkの画面から、
「Appの管理」→「他のAppを参照」→「Numeral」で検索→
「Numeral system macros for Splunk」を「インストール」

Splunk.comのユーザー名とパスワード(Splunkダウンロード時に作成したアカウントなど。無料でここから作成できます)を入力し、
利用規約に「同意してインストール」

image.png

image.png

1
2
1

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?