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::Lite
와 XML::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.gopackage 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에서 홍보된 주소를 시각화했습니다.
Reference
이 문제에 관하여(BGP 풀루트 정보를 바탕으로 ipv4-heatmap을 적용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aoki/items/fbf30a7a9d039275566e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1. Build
git clone https://github.com/measurement-factory/ipv4-heatmap.git
cd ipv4-heatmap
make
빌드에는 GD가 필요합니다.
2. Label 업데이트
Net::CIDR::Lite
와 XML::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.gopackage 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에서 홍보된 주소를 시각화했습니다.
Reference
이 문제에 관하여(BGP 풀루트 정보를 바탕으로 ipv4-heatmap을 적용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aoki/items/fbf30a7a9d039275566e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
10.0.0.0/8 0x7F7FFF 64
172.16.0.0/12 0x7F7FFF 64
192.168.0.0/16 0x7F7FFF 64
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())
}
go run mrt-to-shade.go rib.20191126.1200 > /tmp/rib.shade
../../ipv4-heatmap -a iana-labels.txt -s /tmp/rib.shade < /dev/null
ipv4-heatmap과 routeviews.org를 이용하여 BGP에서 홍보된 주소를 시각화했습니다.
Reference
이 문제에 관하여(BGP 풀루트 정보를 바탕으로 ipv4-heatmap을 적용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aoki/items/fbf30a7a9d039275566e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)