BGP 풀루트 정보를 바탕으로 ipv4-heatmap을 적용

소개



ipv4-heatmap이라는 IPv4 주소 공간을 시각화하는 도구가 있습니다.

그림. htp : /// ps. 메시 시멘 t-c와 ry. 코m/ 보다 인용

위는 2008년에 작성된 이미지이므로 아직 Unallocated가 있는 등 오래된 정보입니다.
이 섹션에서는 2019 년 버전 이미지를 만들 목적으로 BGP 전체 경로 정보를 사용하여 ipv4-heatmap을 사용하는 방법을 요약합니다.

ipv4-heatmap 설치



1. Build


git clone https://github.com/measurement-factory/ipv4-heatmap.git
cd ipv4-heatmap
make

빌드에는 GD가 필요합니다.

2. Label 업데이트


Net::CIDR::LiteXML::Simple 가 필요합니다. 적절하게 설치하십시오.
cd labels/iana
wget -O ipv4-address-space https://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xml
perl grok.pl < ipv4-address-space > iana-labels.txt
iana-labels.txt 생성 후 다음 명령을 실행하여 주소 블록 할당 조직을 나열 할 수있는 이미지를 만들 수 있습니다.
../../ipv4-heatmap -a iana-labels.txt  < /dev/null


그림. 주소 블록 할당 조직도

BGP 풀루트



여기서는 routeviews.org에 게시된 MRT 형식의 BGP 전체 경로 정보를 활용합니다.
또한 ipv4-heatmap으로 로드할 수 있도록 MRT를 텍스트 형식으로 변환합니다.

1. 다운로드



ㅜㅜㅜ ㅜㅜㅜㅜㅋㅋ rg/ 에서 최신 rib.bz2 를 다운로드하여 배포하세요. (MRT format RIBs and UPDATEs from DIXIE (WIDE) 등)

2. MRT에서 텍스트 형식으로 변환



ipv4-heatmap 에서는 shade 라고 하는 텍스트 형식의 파일을 읽어들일 수 있어, 색을 칠할 수 있습니다.

shade 파일 예
10.0.0.0/8      0x7F7FFF        64
172.16.0.0/12   0x7F7FFF        64
192.168.0.0/16  0x7F7FFF        64

MRT에서 shade로 변환하려면 아래 프로그램을 저장하고 명령을 실행하십시오.

mrt-to-shade.go
package main

import (
        "fmt"
        "os"
        "strconv"
        "strings"

        "github.com/osrg/gobgp/pkg/packet/mrt"
        "gopkg.in/alecthomas/kingpin.v2"
)

var (
        filename = kingpin.Arg("filename", "mrt file path").Required().String()
        color    = []string{
                "fde725", "eae51a", "d5e21a", "c0df25", "a8db34", "93d741",
                "7fd34e", "6ccd5a", "58c765", "48c16e", "3aba76", "2eb37c",
                "25ab82", "20a386", "1e9c89", "1f948c", "228c8d", "25848e",
                "287d8e", "2b758e", "2e6d8e", "32658e", "365d8d", "3a548c",
                "3e4a89", "424186", "453882", "472e7c", "482374", "48186a",
                "470d60", "440154",
        }
)

func Run() int {
        // Reference: https://github.com/osrg/gobgp/blob/master/cmd/gobgp/mrt.go
        f, err := os.Open(*filename)
        if err != nil {
                fmt.Println(err)
                return 1
        }
        defer f.Close()

        for {
                buf := make([]byte, 12)
                _, err = f.Read(buf)
                if err != nil {
                        break
                }

                h := &mrt.MRTHeader{}
                err = h.DecodeFromBytes(buf)
                if err != nil {
                        fmt.Println(err)
                        return 1
                }

                buf = make([]byte, h.Len)
                _, err = f.Read(buf)
                if err != nil {
                        break
                }

                msg, err := mrt.ParseMRTBody(h, buf)
                if err != nil {
                        continue
                }

                if h.SubType == mrt.RIB_IPV4_UNICAST.ToUint16() {
                        rib := msg.Body.(*mrt.Rib)

                        s := strings.Split(rib.Prefix.String(), "/")
                        n, err := strconv.Atoi(s[1])
                        if err != nil {
                                continue
                        }

                        fmt.Printf("%s\t0x%s\t64\n", rib.Prefix, color[n - 1])
                } else {
                        continue
                }
        }

        return 0
}

func main() {
        kingpin.Version("0.0.1")
        kingpin.Parse()
        os.Exit(Run())
}

shade 작성 명령
go run mrt-to-shade.go rib.20191126.1200 > /tmp/rib.shade

3. heatmap 생성


../../ipv4-heatmap -a iana-labels.txt -s /tmp/rib.shade < /dev/null


그림. 2019년판 heatmap

밝은(황색) 곳은 큰 서브넷(/8등)으로 홍보되고 있는 것을 나타내고 있어, 어두워짐에 따라 세세해져 갑니다. (viridis로 색칠)
새까만은 BGP에서 홍보되지 않은 네트워크입니다.

결론



ipv4-heatmap과 routeviews.org를 이용하여 BGP에서 홍보된 주소를 시각화했습니다.

좋은 웹페이지 즐겨찾기