V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
szxczyc
V2EX  ›  程序员

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

  •  
  •   szxczyc · 2019-11-18 04:04:00 +08:00 · 5017 次点击
    这是一个创建于 1862 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有个 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 条回复    2019-11-19 10:49:02 +08:00
    mouyase
        1
    mouyase  
       2019-11-18 04:32:33 +08:00 via Android
    试试 DDNS ?
    sagaxu
        2
    sagaxu  
       2019-11-18 04:54:07 +08:00 via Android
    我用 dnspod,不用写代码,curl 定时调用
    szxczyc
        3
    szxczyc  
    OP
       2019-11-18 05:03:02 +08:00 via iPhone
    @mouyase #1 用的就是 ddns😅
    szxczyc
        4
    szxczyc  
    OP
       2019-11-18 05:03:30 +08:00 via iPhone
    @sagaxu #2 贴一下 github?
    jokephp
        5
    jokephp  
       2019-11-18 05:25:40 +08:00
    @szxczyc 可以用 contab 进行定时调用 curl
    jokephp
        6
    jokephp  
       2019-11-18 05:26:35 +08:00
    @jokephp crontab
    szxczyc
        7
    szxczyc  
    OP
       2019-11-18 06:01:20 +08:00
    @jokephp 代码贴一下
    eason1874
        8
    eason1874  
       2019-11-18 06:28:09 +08:00
    你这个 getip 网址返回内容只是多了个换行符,恐怕是最简单的接口了,这也处理不了吗?

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

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

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

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

    三行代码搞定。
    jon
        18
    jon  
       2019-11-18 09:59:19 +08:00
    lz 头像详细希望?
    a67793581
        19
    a67793581  
       2019-11-18 10:02:43 +08:00
    @imdong 思路清晰 我也怎么觉得
    shuizhengqi
        20
    shuizhengqi  
       2019-11-18 10:05:35 +08:00
    https://github.com/shuizhengqi1/aliddns 以前写过一个,只要用你的阿里云 ak 替换就行,然后里面写上你要修改的域名
    xiri
        21
    xiri  
       2019-11-18 10:22:19 +08:00
    为什么不修改推送逻辑,让它只在 ip 发生变动时才推送呢?
    只需要每次推送完之后把 ip 保存下来,然后每次检测的时候对比一下,不一样才推消息就行了
    opengps
        22
    opengps  
       2019-11-18 10:53:30 +08:00
    花生壳动态解析需要实名了,不然我会直接推荐你在目标网络内部装个花生壳
    doyel
        23
    doyel  
       2019-11-18 11:20:01 +08:00
    我上古时代自己写过个 curl 获取类似 ip138 网页内容然后截取,如果 ip 变了发邮件的。。。自己循环自己。。。10 分钟完成用了好多年。。。然后公网 IP 没了。。。
    szxczyc
        24
    szxczyc  
    OP
       2019-11-18 13:57:09 +08:00 via iPhone
    @shuizhengqi #20 pip 无权限
    Lunatic1
        25
    Lunatic1  
       2019-11-18 14:54:37 +08:00
    oceanTu
        26
    oceanTu  
       2019-11-19 10:49:02 +08:00
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3403 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:22 · PVG 19:22 · LAX 03:22 · JFK 06:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.