V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
notgod
V2EX  ›  分享创造

基于 BGP 数据的 IP ASN 查询系统, 邀请测试

  •  
  •   notgod · 2016-07-17 20:22:08 +08:00 · 8877 次点击
    这是一个创建于 3049 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一直特别想做个这东西 都快魔怔了
    这个可能专业性比较强,大部分 IDC 会有这个需求

    终于差不多算搞好了,现在数据还不太完善,比如上游和下游的 upstream ,采集到还不太全面
    和 BGPHE 的数据有些差异

    差不多这个样子
    查询 IP 地址,然后可以看到 IP 归属哪个公司的 ASN
    https://www.boip.net/ipv4/119.9.125.205

    在点击,也可以直接查询 https://www.boip.net/asn
    例如 https://www.boip.net/asn/AS45187
    就可以获得该公司的信息
    比如我们想要投诉侵权的 可以直接查看到 abuse 的邮箱信息 发投诉信就可以了
    也有公司的邮箱,比如需要托管到这个公司 都可以直接联系
    有 WHOIS 和 RADB 的信息可以看到

    可以查看到该 ASN 下所有的 IPv4/IPv6 的网段,以及对等交换的 Peers
    还可以查看到和哪些互联网交换中心有直连

    BGP 路由的走向数据有 但是不太懂如何生成那种走向图
    谁懂 教我下?
    我只是路过抖个机灵,有什么建议或者意见 可以联系我!
    第 1 条附言  ·  2016-07-19 22:54:29 +08:00
    更新:

    1. 增加了 API
    https://www.boip.net/api
    可以调用一些 GEO 数据了

    2. 另外制作了一个 IP GEO 信息 直接显示在图片上的 API
    图片地址 会直接显示你当前的 IP 和来源国家 以及 Flags
    https://www.boip.net/api/show
    论坛和网页 都可以直接调用 调用代码在 API

    3. IX 和 IXP 交换节点 列表和详细信息也快上线了
    调用 PeeringDB 的数据,问题在于那个数据不是自己规划的结构,调用有些问题
    暂时只显示了列表
    19 条回复    2017-02-21 08:16:21 +08:00
    qhxin
        1
    qhxin  
       2016-07-17 21:36:28 +08:00
    啊赞
    New2016
        2
    New2016  
       2016-07-17 22:10:05 +08:00
    adrianzhang
        3
    adrianzhang  
       2016-07-17 22:16:38 +08:00 via Android
    很赞!十分需要这种服务。楼主可以学学 ipip.net 的商业模式
    notgod
        4
    notgod  
    OP
       2016-07-17 22:21:13 +08:00 via iPhone
    @qhxin 谢谢

    @New2016 去哪里看是你的自由,:)

    @adrianzhang 商业化不考虑,这是个人兴趣而已
    商业化要考虑的问题太多,
    yexm0
        5
    yexm0  
       2016-07-17 22:22:15 +08:00
    notgod
        6
    notgod  
    OP
       2016-07-17 22:29:06 +08:00 via iPhone
    @yexm0 有这个错误
    一旦查不到纪录 就会抛出异常
    因为 IP 查询调用了 5 个数据商的来源
    没有设置定时更新数据源机制

    后面在修复吧 慢慢来
    scys
        7
    scys  
       2016-07-17 23:04:25 +08:00
    之前写了一个差不多的功能的,不过数据量就是简单点: D
    https://only-pass.com 楼主可以考虑将 whois 也加进去,还有一些奇怪的数据源也有,比如 https://www.iplocation.net/
    wico77
        8
    wico77  
       2016-07-18 04:35:16 +08:00
    LZ 的头像让人好有错觉
    jizhidebocai
        9
    jizhidebocai  
       2016-07-18 08:55:59 +08:00
    想了解一下是用什么语言写的, 基于哪种技术
    alect
        10
    alect  
       2016-07-18 09:00:47 +08:00
    @jizhidebocai 看楼上错误日志, php
    iphantom
        11
    iphantom  
       2016-07-18 09:23:42 +08:00
    哇塞 赞
    Revoluton
        12
    Revoluton  
       2016-07-18 10:23:25 +08:00
    LZ 的头像让人好有错觉 很像我贵州一个朋友
    youKnowDai
        13
    youKnowDai  
       2016-07-18 12:09:35 +08:00
    zan
    notgod
        14
    notgod  
    OP
       2016-07-18 13:16:37 +08:00 via iPhone
    @jizhidebocai
    php , python ,历史记录数据库和数据缓存使用 sqllite , peers 和 ix 节点其他信息 存储在 mysql
    数据采集是 shell 和 awk
    数据源就是 ip2loc 。 maxmind sina qq 淘宝 纯真
    asn 是直接 ripe apnic 等机构下载的数据 然后 awk 提取出来的 有部分使用了 api

    @iphantom 谢谢鼓励
    @alect 是的, php 相对简单 有部分数据处理是 python 和 shell

    @youKnowDai 谢谢鼓励


    @scys 也不错 挺简洁,我那个偏重于数据展示那块
    wujunze
        15
    wujunze  
       2016-07-20 11:39:10 +08:00
    很赞的功能 支持楼主
    idblife
        16
    idblife  
       2016-07-20 14:03:26 +08:00
    500 Internal Server Error

    Undefined index: ripencc (8)

    #0 /home/admin/domains/boip.net/public_html/init.php(176): flight\Engine->handleError(8, 'Undefined index...', '/home/admin/dom...', 176, Array)
    #1 /home/admin/domains/boip.net/public_html/app/views/IPv4_result.php(116): get_rir('ripencc')
    #2 /home/admin/domains/boip.net/public_html/app/flight/template/View.php(118): include('/home/admin/dom...')
    #3 /home/admin/domains/boip.net/public_html/app/flight/Engine.php(440): flight\template\View->render('IPv4_result', Array)
    #4 /home/admin/domains/boip.net/public_html/app/flight/core/Dispatcher.php(199): flight\Engine->_render('IPv4_result', Array)
    #5 /home/admin/domains/boip.net/public_html/app/flight/core/Dispatcher.php(142): flight\core\Dispatcher::invokeMethod(Array, Array)
    #6 /home/admin/domains/boip.net/public_html/app/flight/core/Dispatcher.php(48): flight\core\Dispatcher::execute(Array, Array)
    #7 /home/admin/domains/boip.net/public_html/app/flight/Engine.php(64): flight\core\Dispatcher->run('render', Array)
    #8 /home/admin/domains/boip.net/public_html/app/flight/core/Dispatcher.php(199): flight\Engine->__call('render', Array)
    #9 /home/admin/domains/boip.net/public_html/app/flight/core/Dispatcher.php(199): flight\Engine->render('IPv4_result', Array)
    #10 /home/admin/domains/boip.net/public_html/app/flight/Flight.php(65): flight\core\Dispatcher::invokeMethod(Array, Array)
    #11 /home/admin/domains/boip.net/public_html/app/route/ipv4.php(66): Flight::__callStatic('render', Array)
    #12 /home/admin/domains/boip.net/public_html/app/route/ipv4.php(66): Flight::render('IPv4_result', Array)
    #13 /home/admin/domains/boip.net/public_html/app/flight/core/Dispatcher.php(162): {closure}('176.126.71.198')
    #14 /home/admin/domains/boip.net/public_html/app/flight/core/Dispatcher.php(143): flight\core\Dispatcher::callFunction(Object(Closure), Array)
    #15 /home/admin/domains/boip.net/public_html/app/flight/Engine.php(312): flight\core\Dispatcher::execute(Object(Closure), Array)
    #16 /home/admin/domains/boip.net/public_html/app/flight/core/Dispatcher.php(191): flight\Engine->_start()
    #17 /home/admin/domains/boip.net/public_html/app/flight/core/Dispatcher.php(142): flight\core\Dispatcher::invokeMethod(Array, Array)
    #18 /home/admin/domains/boip.net/public_html/app/flight/core/Dispatcher.php(48): flight\core\Dispatcher::execute(Array, Array)
    #19 /home/admin/domains/boip.net/public_html/app/flight/Engine.php(64): flight\core\Dispatcher->run('start', Array)
    #20 /home/admin/domains/boip.net/public_html/app/flight/core/Dispatcher.php(191): flight\Engine->__call('start', Array)
    #21 /home/admin/domains/boip.net/public_html/app/flight/core/Dispatcher.php(191): flight\Engine->start()
    #22 /home/admin/domains/boip.net/public_html/app/flight/Flight.php(65): flight\core\Dispatcher::invokeMethod(Array, Array)
    #23 /home/admin/domains/boip.net/public_html/index.php(41): Flight::__callStatic('start', Array)
    #24 /home/admin/domains/boip.net/public_html/index.php(41): Flight::start()
    #25 {main}
    notgod
        17
    notgod  
    OP
       2016-07-20 20:29:12 +08:00
    @idblife 感谢 已 Fix

    数组的问题

    $data = array();
    $data['apnic'] = 'APNIC.NET 亚太管理机构 - 亚洲太平洋区域';
    $data['arin'] = 'ARIN.NET 北美管理机构 - 美国,加拿大,加勒比群岛区域';
    $data['afrinic'] = 'AFRINIC.NET 南非管理机构 - 南非区域';
    $data['lacnic'] = 'LACNIC.NET 拉美管理机构 - 拉丁美洲和外岛区域 ';
    $data['ripe'] = 'RIPE.NET 欧盟管理机构 - 欧洲中东和中亚区域';
    暂时加了条 解决这个问题
    $data['ripencc'] = 'RIPE.NET 欧盟管理机构 - 欧洲中东和中亚区域';

    理论最佳的方式应该使用
    match 匹配返回的 不过我懒 而且 :)
    mibootore
        18
    mibootore  
       2016-10-24 10:05:01 +08:00
    不错,多了一个选择
    usernametoolong
        19
    usernametoolong  
       2017-02-21 08:16:21 +08:00
    发现错别字 “无纪录”
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5323 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 03:39 · PVG 11:39 · LAX 19:39 · JFK 22:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.