获取指定ASN号(运营商)发布的BGPv4路由前缀

脚本用法

示例:查询中国国际移动所有已向全球广播的ip段
    ./123 58453         #脚本名后 空格跟一个ASN

脚本内容

#!/bin/bash

# 获取ipv4 bgp路由表文件
    # https://bgp.potaroo.net/as2.0/report.txt   这是一份分析报告
    wget -O bgptable_v4.txt http://bgp.potaroo.net/as2.0/bgptable.txt

# 获取ipv6 bgp路由表文件
    wget -O bgptable_v6.txt https://bgp.potaroo.net/v6/as2.0/bgptable.txt

# 将windows的文本转换为linux文本
    dos2unix bgptable_v4.txt
    dos2unix bgptable_v6.txt

# 注意要想grep能引用变量,必须使用双引号
# 先sed处理成有用的单行数据,grep 带入变量过滤出需要的数据,sort根据指定序列排序后,更加去重
    # sed  -n 's/\./-/6p' bgptable.txt | grep " $1 i$" | sort -u -k 2,2

附、处理ipv4路由表的命令(这是一条命令)

awk '
# 只要这一行出现 CIDR,就更新当前前缀
/\/[0-9]+/ {
    for (i=1; i<=NF; i++) {
        if ($i ~ /\/[0-9]+/) {
            current_prefix = $i
            break
        }
    }
}

# 遇到 best path
/^\*>/ {
    line = $0

    # 如果本行没有 CIDR,就补上当前前缀
    has_cidr = 0
    for (i=1; i<=NF; i++) {
        if ($i ~ /\/[0-9]+/) {
            has_cidr = 1
            break
        }
    }

    if (!has_cidr && current_prefix != "") {
        sub(/^\*>[[:space:]]*/, "", line)
        print "*> " current_prefix, line
    } else {
        print
    }
}
' bgptable_v4.txt > bgptable_v4_new.txt

附、处理ipv6路由表的数据

## 第一步处理
awk '
/^[*]/ {
    if (NR > 1) print rec
    rec = $0
    next
}
{
    gsub(/^[[:space:]]+/, "", $0)
    rec = rec " " $0
}
END {
    if (rec) print rec
}
' bgptable_v6.txt > bgptable_v6_transit.txt

## 第二步处理
awk '
# 只要这一行出现 CIDR,就更新当前前缀
/\/[0-9]+/ {
    for (i=1; i<=NF; i++) {
        if ($i ~ /\/[0-9]+/) {
            current_prefix = $i
            break
        }
    }
}

# 遇到 best path
/^\*>/ {
    line = $0

    # 如果本行没有 CIDR,就补上当前前缀
    has_cidr = 0
    for (i=1; i<=NF; i++) {
        if ($i ~ /\/[0-9]+/) {
            has_cidr = 1
            break
        }
    }

    if (!has_cidr && current_prefix != "") {
        sub(/^\*>[[:space:]]*/, "", line)
        print "*> " current_prefix, line
    } else {
        print
    }
}
' bgptable_v6_transit.txt > bgptable_v6_new.txt

## 删除多余文件,最后得到文件 bgptable_v6_new.txt
    rm -rf bgptable_v6_transit.txt

附、如何保留如下格式字段(前缀,起始ASN)

## 数据示例
    39.173.112.0/22,56041
    39.173.116.0/22,56041
    39.173.120.0/21,56041

## 分别处理 ipv4 和 ipv6
    awk '{print $2 "," $(NF-1)}' bgptable_v4_new.txt > bgptable_v4_asn.txt
    awk '{print $2 "," $(NF-1)}' bgptable_v6_new.txt > bgptable_v6_asn.txt
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/222.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2025/12/23作者: 辣条①号

目标:网络规划设计师、系统工程师、ceph存储工程师、云计算工程师。 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录