V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
HankLu
V2EX  ›  Python

有没有不需要访问网络即可获取本机外网 IP 地址的方法

  •  
  •   HankLu · 2021-05-04 19:16:25 +08:00 · 4318 次点击
    这是一个创建于 1282 天前的主题,其中的信息可能已经有所发展或是发生改变。
    22 条回复    2021-05-05 11:07:44 +08:00
    Rxianbei
        1
    Rxianbei  
       2021-05-04 19:17:25 +08:00 via Android
    一般的家庭网络是通过路由器在连接光猫拨号上网的,这是没有办法的
    learningman
        2
    learningman  
       2021-05-04 19:18:29 +08:00 via Android   ❤️ 2
    你不知道上面套了几层 NAT,NAT 后无法感知
    raysonx
        3
    raysonx  
       2021-05-04 19:20:18 +08:00
    不能,因为“外网 IP”不属于你。
    imn1
        4
    imn1  
       2021-05-04 19:23:45 +08:00
    以前的旧路由器,在某个页面是显示了外网 ip 的,以前就靠内网读取这个页面
    但新路由没有这个,作罢了
    HankLu
        5
    HankLu  
    OP
       2021-05-04 19:29:05 +08:00
    现在有个很麻烦的、需要白名单才能访问的 url,我需要第一步访问网络获取本地 ip,第二步通过带 key 的 api 把 ip 添加到白名单,第三步才能访问这个 url 。
    什么人才才能想出这个绝妙的成倍增加工作量的逻辑啊。大婶们我怎么优化我的三部曲以尽量降低出错后面的处理?
    MakeItGreat
        6
    MakeItGreat  
       2021-05-04 19:31:16 +08:00 via Android
    中转
    HankLu
        7
    HankLu  
    OP
       2021-05-04 19:34:30 +08:00
    @MakeItGreat 大神,我这个 url 就是个中转站(带里)
    yanqiyu
        8
    yanqiyu  
       2021-05-04 19:47:02 +08:00
    大概不行,除非...
    1) 你的机器 ip 就是外网 ip
    2) 你的网关等设备提供查询公网 ip 的接口
    或者想办法让白名单放行某个通用的 ip 地址查询 api
    caliburn1994
        9
    caliburn1994  
       2021-05-04 19:49:34 +08:00
    为什么不访问外部网络?访问网络的话

    ```
    curl -s ipinfo.io/ip
    ```
    ysc3839
        10
    ysc3839  
       2021-05-04 19:55:54 +08:00 via Android
    没经过 NAT 转换的话,可以,否则不行。
    kennylam777
        11
    kennylam777  
       2021-05-04 20:01:23 +08:00
    家用路由器還有 upnp 一招, BitTorrent clients, PlayStation 及 Xbox 等等都會用到
    gjquoiai
        12
    gjquoiai  
       2021-05-04 20:05:17 +08:00
    1. 自建机房的话应该是固定的一组出口 ip
    2. 公有云一般都提供了以编程方式查询实例出口 ip 的方法
    HankLu
        13
    HankLu  
    OP
       2021-05-04 20:13:19 +08:00   ❤️ 1
    已解决,我这个没有路由转接,直接用 IPs = socket.gethostbyname_ex(socket.gethostname())[-1]获取到了,这一下降低了我一半的工作量
    ClericPy
        14
    ClericPy  
       2021-05-04 20:18:50 +08:00
    如果实在懒, curl http://httpbin.org/get 算了
    ClericPy
        15
    ClericPy  
       2021-05-04 20:19:14 +08:00
    抱歉没注意 "不需要访问网络"... 溜了
    dorothyREN
        16
    dorothyREN  
       2021-05-04 23:19:17 +08:00
    直接 tracert 判断出口 IP 就行
    opengps
        17
    opengps  
       2021-05-04 23:47:42 +08:00
    这个真没有,因为你并不知道你的最终公网出口具体在什么位置,如果确定了出口位置,那么可以去这个位置查一下公网 ip
    opengps
        18
    opengps  
       2021-05-04 23:48:36 +08:00
    另外还有个问题,公网的出入口,有可能不唯一
    Jooooooooo
        19
    Jooooooooo  
       2021-05-05 00:29:55 +08:00
    好像是你没上地铁得知道自己会坐哪, 除非位置是提前分配的.
    no1xsyzy
        20
    no1xsyzy  
       2021-05-05 02:53:15 +08:00
    也可以尝试要个公网 IP,那样的话路由器可能有页面能找到 IP = 公网 IP
    但也可能要不到。
    出口不唯一的话甚至你联网获取了 IP 都不一定对
    ik
        21
    ik  
       2021-05-05 09:47:09 +08:00 via iPhone
    @HankLu #直接访问这个带 key 的 api,后端获得源地址后添加白名单呢?
    whwq2012
        22
    whwq2012  
       2021-05-05 11:07:44 +08:00
    向运营商购买专线,配置固定 IP
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5361 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 07:38 · PVG 15:38 · LAX 23:38 · JFK 02:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.