• 请不要在回答技术问题时复制粘贴 AI 生成的内容
szxczyc
V2EX  ›  程序员

迫于代码能力太烂,求助一个公网 IP 推送的办法

  •  
  •   szxczyc · Nov 18, 2019 · 5836 views
    This topic created in 2370 days ago, the information mentioned may be changed or developed.

    有个 ubuntu 服务器安装了 anaconda 平常用来跑跑数据,但是拿到的权限太小,没有 root 权限,只能跑代码用。蛋疼的是内网 IP 完全连不通,只能用公网 IP,时不时服务器就断一下。每次都要别人帮忙看公网 IP,太麻烦了。

    自己写了 py 代码后 crontab 每隔 10 分钟获取一次 IP 用 sever 酱推送到微信,但是有可能几天才变一次 IP,推送总要置顶,太笨。

    现在有两个更好解决方案:

    1、写一个 py 脚本,ip 变化时通知 BUT:从 members.3322.org/dyndns/getip 拿到的数据格式有点问题(b'1.1.1.1\n'),处理不了

    2、直接用 aliyunDDNS BUT:大部分需要装阿里云从 github.com/NewFuture/DDNS 拿到的 py 脚本都可以调试成功,但是定时任务 sudo ./task.sh 命令没权限

    系统调用 python 只能用 py3 自带的库,pip 之类的是不行的。 除了 py 如果有 shell 脚本也可以,谢谢!

    26 replies    2019-11-19 10:49:02 +08:00
    mouyase
        1
    mouyase  
       Nov 18, 2019 via Android
    试试 DDNS ?
    sagaxu
        2
    sagaxu  
       Nov 18, 2019 via Android
    我用 dnspod,不用写代码,curl 定时调用
    szxczyc
        3
    szxczyc  
    OP
       Nov 18, 2019 via iPhone
    @mouyase #1 用的就是 ddns😅
    szxczyc
        4
    szxczyc  
    OP
       Nov 18, 2019 via iPhone
    @sagaxu #2 贴一下 github?
    jokephp
        5
    jokephp  
       Nov 18, 2019
    @szxczyc 可以用 contab 进行定时调用 curl
    jokephp
        6
    jokephp  
       Nov 18, 2019
    @jokephp crontab
    szxczyc
        7
    szxczyc  
    OP
       Nov 18, 2019
    @jokephp 代码贴一下
    eason1874
        8
    eason1874  
       Nov 18, 2019
    你这个 getip 网址返回内容只是多了个换行符,恐怕是最简单的接口了,这也处理不了吗?

    你不说你用哪个 DNS 怎么给你例子啊。用 DNSPod 就简单,鉴权就一个参数,签名都不用,从新写个例子就几分钟的事,但 DNSPod 不支持子域名接入,你要从阿里云 DNS 换过来的话得整个迁入。

    DNSPod 文档 : https://www.dnspod.cn/docs/records.html#dns
    deepdark
        10
    deepdark  
       Nov 18, 2019 via Android
    我是 crontab 每隔 5 分钟调用一次脚本,脚本内容是,获取当前公网地址,然后用 dnspod 的 api 更新 ip 地址,比较简单
    dangyuluo
        11
    dangyuluo  
       Nov 18, 2019
    直接写 shell+crontab,把 IP 保存到 /tmp/ip 文件里,然后每次对比是否变化,再用 PushBullet 推送,只需要 curl 就可以
    ik
        12
    ik  
       Nov 18, 2019 via iPhone
    计划任务不需要 sudo 权限吧?
    sutra
        13
    sutra  
       Nov 18, 2019
    找一个能用 curl 命令上报的 DDNS 服务就可以了,没必要非得用 aliyunDDNS。
    luckyc
        14
    luckyc  
       Nov 18, 2019
    dnspod aliyun 不都有 API 么.
    shell 更新 ip 不是什么难事吧.
    lbp0200
        15
    lbp0200  
       Nov 18, 2019 via iPhone
    上古时代,都是直接发邮件的
    liuky
        16
    liuky  
       Nov 18, 2019
    用 docker 部署你的 python 程序, 在你的 docker 容器里面你想怎么干就怎么干
    imdong
        17
    imdong  
       Nov 18, 2019
    继续用 server 酱,加入 IP 不变就不推送的逻辑。

    推送成功后保存到 ip.txt 文件内。

    推送前读取这个文件,如果内容一直直接退出即可。

    三行代码搞定。
    jon
        18
    jon  
       Nov 18, 2019
    lz 头像详细希望?
    a67793581
        19
    a67793581  
       Nov 18, 2019
    @imdong 思路清晰 我也怎么觉得
    shuizhengqi
        20
    shuizhengqi  
       Nov 18, 2019
    https://github.com/shuizhengqi1/aliddns 以前写过一个,只要用你的阿里云 ak 替换就行,然后里面写上你要修改的域名
    xiri
        21
    xiri  
       Nov 18, 2019
    为什么不修改推送逻辑,让它只在 ip 发生变动时才推送呢?
    只需要每次推送完之后把 ip 保存下来,然后每次检测的时候对比一下,不一样才推消息就行了
    opengps
        22
    opengps  
       Nov 18, 2019
    花生壳动态解析需要实名了,不然我会直接推荐你在目标网络内部装个花生壳
    doyel
        23
    doyel  
       Nov 18, 2019
    我上古时代自己写过个 curl 获取类似 ip138 网页内容然后截取,如果 ip 变了发邮件的。。。自己循环自己。。。10 分钟完成用了好多年。。。然后公网 IP 没了。。。
    szxczyc
        24
    szxczyc  
    OP
       Nov 18, 2019 via iPhone
    @shuizhengqi #20 pip 无权限
    oceanTu
        26
    oceanTu  
       Nov 19, 2019
    freemyip.com 做 DDNS
    1. 去 www.freemyip.com 申请一个二级域名
    2. crontab 定时任务,10 分钟刷一遍
    */10 * * * * curl "https://freemyip.com/update?token=#YOUR_TOKEN#&domain=#YOUR_DDNS_NAME#.freemyip.com&myip=$(/sbin/ifconfig eno1 |/bin/grep netmask |/usr/bin/awk '{print $2}')" >/dev/null 2>&1
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   951 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 84ms · UTC 20:09 · PVG 04:09 · LAX 13:09 · JFK 16:09
    ♥ Do have faith in what you're doing.