DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tino0914
今日帖子: 30
在线用户: 14
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2021/1/19 10:44:37
标题:
自己做的一个查公网IP并发到邮箱的小工具 浏览:2614
加入我的收藏
楼主: 上周四没啥事,就做了个查自家公网IP的小工具,查了之后可以发到指定邮箱里。
这个工具可以以程序方式运行,也可以注册成系统服务。
拿到之后先直接运行一下,运行之后会自动在同一目录下生成一个ini文件。
运行后按检测周期检测,启动时第一次检测的IP会自动发送到邮箱,后面再检测就会比一下IP有没有变,没变就不重复发送了。

[System]
Reflex Server=http://pv.sohu.com/cityjson?ie=utf-8
Time Circle (ms)=10000//这是检测的周期,自动生成的只有十秒,大家还是设成十分钟就可以了

[EMail]
Address=用来收邮件的邮件,一般设成和下面SMTP的UserName一致就行了。
Subject=邮件标题

[SMTP]
IP=smtp.163.com
Port=25
UserName=****@163.com
Password=*******注意一下,这个password一般和你邮箱登录密码不同,要到邮箱网页中看一下SMTP的配置,里面一般有个申请密码的地方,这种密码是给你邮箱申请使用其它客户端时登录用的。


rar里面有源代码,delphiXE10.4环境开发的,对日志和配置文件的处理使用了我自己开发的一些基础代码,我没放进来。日志的基础使用了codesite。codesite发日志的时候是使用的TCP发到本地的,装个codesite运行dispatcher就可以同步看日志了
当然不看也没问题。codesite不直接使用file的方式是因为在服务方式下File的方式是不能正常运行的。

核心的查IP和发邮件的都是很简单的,就几行代码,有要用到的可以看下代码用在自己项目里。

做这个的目的是我自家的机器数据库,SVN,摄像头,啥的做了公网映射,但公网IP过段时间会自动变一下的,我家的周期是一两周变一次,时间不定,断了自动重连就变了。搞个邮箱收IP用到的时候查下邮箱就可以连家里机器了。
此帖子包含附件:tiez_2021119104415.rar 大小:1.49M
----------------------------------------------
-
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2021/1/19 10:47:09
1楼: 运行的时候界面上有个录入邮箱地址的框,修改了一存其实就改了配置中的email的address,是方便使用的,因为目标邮箱可能会变化,其它的还是直接在配置文件中改吧。
----------------------------------------------
-
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2021/1/19 10:55:53
2楼: 忘说怎么注册成服务了。
以管理员方式运行那个黑乎乎的控制台。
>可执行文件名 /install
这样就注册进去了。
反注册是
>可执行文件名 /uninstall
注册成功了服务里面会多个3W IP reporting service的服务,中文描述是“外网IP上报服务”,设成自动运行那机器启动后就会自己上报了。
注册了这个再直接运行可执行文件就没有反应了,反注册后就又可以以程序的方式运行了。
这个combo服务的模式使用了remobjects的基础控件。
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2021/1/19 11:09:24
3楼: = =唉拿不到外网ip。
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2021/1/19 13:56:27
4楼: 3楼,为啥?
----------------------------------------------
-
作者:
男 xjia (xjia) ★☆☆☆☆ -
盒子活跃会员
2021/1/19 16:19:51
5楼: 感觉用动态域名比这简单,放在内网或路由上更新

3# 估计是用的移动宽带,移动宽带基本都不能申请公网IP
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2021/1/19 22:50:20
6楼: 动态域名更新dns速度并不快
联通 小区ip  唉,打过电话  要么办理企业宽带??????????/我去忽悠我开企业的。。
我特么是个体户啊
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2021/1/20 12:35:43
7楼: 我家是电信的,打了客服电话说我家需要开放公网IP,也就是说家里光猫上的上口IP直接就是动态获得的公网IP,好像就帮我设了,我原来也不知道,是同事告诉我可以这样的,不用花钱。
这个工具是通过访问sohu的一个服务反射取得公网IP,就是不知道你使用的运营商有没有做什么隐藏操作了。还有一些别的网站也提供这个服务。sohu的这个比较快,返回的是一个简单的类似json的串。
----------------------------------------------
-
作者:
男 buleseli (憤怒的月亮) ▲▲▲△△ -
普通会员
2021/1/20 16:42:19
8楼: 很好很强大,观望下
----------------------------------------------
-
作者:
男 datm (dATM) ★☆☆☆☆ -
盒子活跃会员
2021/1/20 17:06:55
8楼: 搞复杂了,注册一个花生壳帐号,定时访问一个url就可以了
----------------------------------------------
-
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2021/1/21 14:05:33
9楼: 8楼,有时我们管理多台机器,并不想去申请那么多花生壳
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2021/1/21 17:56:45
10楼: 这个问题,两种处理方法。

简单点的,自己写一个服务器端程序放外网,内网的程序访问外网服务器软件,外网服务器自然知道内网程序的【公网】IP;

然后想知道,就向那个外网服务器程序去查询。

这个是实现此功能的原理。用 Delphi 写的话,我通常会写成用 TIdUDP 通讯,或者用 WebService 的模式。总之就是网络通讯,可以获得公网 IP 以及查询。

----------
另外一种,是比较标准的处理方法:DDNS;
我大概在 02年 就用 Delphi 做过 DDNS 了。

DNS 服务器采用互联网上的标准开源的 BIND 服务器,自己在服务器里面写一个服务器端的程序,接收来自私网客户端的网络访问,获得它的公网地址,然后用这个地址去更新 BIND 的解析;更新完,你用 DNS 的方式去查你对应的域名,IP 地址就变成当前最新的了。

DDNS 的问题是 DNS 有个生存期,通常会设置为24小时甚至更长,如果是 DDNS,设置为5分钟,如果太短则 DNS 服务器可能会被频繁性的访问导致服务器压力过大。如果是5分钟,那你更新后,要5分钟后才能看到新的 IP 地址,有滞后。

如果你的服务器只为你自己服务,而不是针对公众服务,没几个人会使用你的域名,那倒是可以把这个生存期参数设置短一点。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2021/1/21 18:15:24
11楼: 我用的 DNS SERVER 是 BIND;

DELPHI 也提供了一个 DNS SERVER:TIdDNSServer,可惜没有资料,不知道如何使用。
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2021/1/21 19:38:43
12楼: to  pcplayer
sf.net上有一个本地(127.0.0.1) dns 服务(当初我设置的来源是8.8.8.8)开源的建议去看看
也有 类似 hosts 文件 忘记了时间长了 主要是用来看访问了哪些dns的。
(当初google改ip可以访问用过很长一段时间)
https://sourceforge.net/projects/acrylic/files/Acrylic/2.0.0/
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2021/1/22 12:26:18
13楼: 楼上,你发的这个,好像不是查询公网 IP 的方法?
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2021/1/22 12:31:52
14楼: 这个 会先query 8.8.8.8 然后丢给来自系统 127.0.0.1 
对127 来说是服务端
对8.8.8.8 来说是客户端
不知道你还要啥?
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 yupor5 (yupor5) ★☆☆☆☆ -
普通会员
2022/5/10 17:44:21
15楼: RemObject 这个没有呀,用不了
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/5/10 23:15:45
16楼: 哦,你是利用了 Sohu 提供的这个服务啊:

http://pv.sohu.com/cityjson?ie=utf-8
----------------------------------------------
-
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2022/5/11 9:27:14
17楼: QQ家的不香吗? 
https://apps.game.qq.com/comm-htdocs/ip/get_ip.php
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2022/5/11 11:09:10
18楼: 17楼,这个东西的目的是不你在这个机器上操作,机器动态IP也不知道,它给你自动发邮箱,只要变更了就发。
你要在这个机器上操作了,那还要外网IP做啥。
还有这个确实比动态IP要快。我是配合Remote Utilities用的,不用teamview和向日葵的。我发现用地址簿就很慢,用已知IP就很快,所以就做了这个东西。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/5/11 12:19:23
19楼: 用公开的服务 + Email 通知的方式,确实是一个好办法。基本上就是不要钱,还能达到效果。

公开服务唯一的问题就是,哪天它可能变了,或者停止服务了。

之前我自己做的一个防火墙程序,要挡住外来连接攻击,需要查询外来 IP 的归属地,使用了阿里的 IP 归属地查询服务,用了半年后,它的服务不稳定了,导致我的防火墙程序半天没反应。我以为程序出了问题,查了半天才发现程序是卡在向阿里服务器查询 IP 归属地那里。
----------------------------------------------
-
作者:
男 dalas (dalas) ★☆☆☆☆ -
普通会员
2022/5/12 1:28:09
20楼: 如果有公网IP,用花生壳免费动态域名就可以了,何需这么麻烦。
现在家宽哪还有公网IP。
----------------------------------------------
-
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2022/5/12 2:45:22
21楼: 谢谢各位兄弟,感觉学了不少。当然最需要感谢的是楼主兄弟。
----------------------------------------------
只有偏执狂才能生存!
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2022/5/14 14:37:20
22楼:
https://www1.szu.edu.cn/nc/speedtest/

http://speed.neu.edu.cn/

http://speed.neu6.edu.cn/getIP.php  没打开http://speed.neu6.edu.cn纯猜链接是这样。
http://speed.neu.edu.cn/getIP.php

http://ip-api.com/json/?lang=zh-CN

https://ipw.cn/ipv6/

curl 4.ipw.cn

curl 6.ipw.cn

curl test.ipw.cn

能拿ip的地方挺多的。
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行85.9375毫秒 RSS