易语言读取QQWary地理位置方法

很多的功能需要查询IP地址的物理位置,这是一个前辈写好的子程序

使用方法:在自己的子程序中直接调用【IP查询(“IP地址”)即可,可以是变量】

.版本 2

.程序集 程序集_查询IP

.子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码

_查询IP () ' 在初始化代码执行完毕后调用测试代码
返回 (0) ' 可以根据您的需要返回任意数值

.子程序 _查询IP

' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。

' 调试输出 (IP查询 (外网IP))

.子程序 IP查询, 文本型, , 查询IP地址的地理位置
.参数 IP地址, 文本型, , 可以是域名
.参数 数据库文件名, 文本型, 可空
.局部变量 文件号, 整数型
.局部变量 文件头字节集, 字节集
.局部变量 IP数量, 长整数型
.局部变量 计次变量, 整数型
.局部变量 开始IP字节集, 字节集
.局部变量 结束IP偏移, 长整数型
.局部变量 结束IP字节集, 字节集
.局部变量 地区偏移, 长整数型
.局部变量 查询IP数值, 长整数型
.局部变量 地区文本, 文本型
.局部变量 IP段信息, 文本型
.局部变量 开始IP读取位置, 长整数型
.局部变量 开始ip, 文本型
.局部变量 结束IP, 文本型
.局部变量 first_start_ip_offset, 长整数型
.局部变量 last_start_ip_offset, 长整数型
.局部变量 开始IP数值, 长整数型
.局部变量 结束IP数值, 长整数型

.如果真 (IP地址 = “”)
  返回 (“”)
.如果真结束
.如果真 (是否为空 (数据库文件名))
  数据库文件名 = “.\QQWry.dat”
.如果真结束
文件号 = 打开文件 (数据库文件名, #读入, #无限制)
.如果真 (文件号 = 0)
  信息框 (“没找到数据库”, 0, )
  返回 (“”)
.如果真结束
文件头字节集 = 读入字节集 (文件号, 8)
first_start_ip_offset = 取字节集数据 (取字节集左边 (文件头字节集, 4), #整数型, )
last_start_ip_offset = 取字节集数据 (取字节集右边 (文件头字节集, 4), #整数型, )
IP数量 = (last_start_ip_offset - first_start_ip_offset) \ 7 + 1
查询IP数值 = IP文本转整数值 (IP地址)
开始IP读取位置 = 二分法确定位置 (文件号, first_start_ip_offset, 1, IP数量, 查询IP数值)
移动读写位置 (文件号, , first_start_ip_offset + (开始IP读取位置 - 1) × 7)
开始IP字节集 = 读入字节集 (文件号, 7)
开始ip = IP文本补位 (取十六进制文本 (取字节集数据 (取字节集左边 (开始IP字节集, 4), #整数型, )))
结束IP偏移 = 取字节集数据 (取字节集右边 (开始IP字节集, 3), #整数型, )
移动读写位置 (文件号, , 结束IP偏移)
结束IP字节集 = 读入字节集 (文件号, 4)
结束IP = IP文本补位 (取十六进制文本 (取字节集数据 (结束IP字节集, #整数型, )))
地区偏移 = 结束IP偏移 + 4
开始IP数值 = 十六进制到十进制 (开始ip)
结束IP数值 = 十六进制到十进制 (结束IP)
.如果真 (查询IP数值 ≥ 开始IP数值 且 查询IP数值 ≤ 结束IP数值)
  地区文本 = 取地区文本 (文件号, 地区偏移)
.如果真结束
关闭文件 (文件号)
返回 (地区文本)

.子程序 二分法确定位置, 整数型
.参数 文件号, 整数型
.参数 基址, 长整数型
.参数 初始位置, 长整数型
.参数 结束位置, 长整数型
.参数 查询值, 长整数型
.局部变量 中间读写位置, 长整数型
.局部变量 中间位置, 长整数型
.局部变量 中间IP文本, 文本型
.局部变量 中间IP数值, 长整数型
.局部变量 结束读写位置, 长整数型
.局部变量 结束IP文本, 文本型
.局部变量 结束IP数值, 长整数型

中间位置 = (初始位置 + 结束位置) \ 2
.如果真 (初始位置 = 中间位置)
  返回 (初始位置)
.如果真结束
结束读写位置 = 基址 + (结束位置 - 1) × 7
移动读写位置 (文件号, , 结束读写位置)
结束IP文本 = IP文本补位 (取十六进制文本 (取字节集数据 (取字节集左边 (读入字节集 (文件号, 7), 4), #整数型, )))
结束IP数值 = 十六进制到十进制 (结束IP文本)
.如果真 (查询值 ≥ 结束IP数值)
  返回 (结束位置)
.如果真结束
中间读写位置 = 基址 + (中间位置 - 1) × 7
移动读写位置 (文件号, , 中间读写位置)
中间IP文本 = IP文本补位 (取十六进制文本 (取字节集数据 (取字节集左边 (读入字节集 (文件号, 7), 4), #整数型, )))
中间IP数值 = 十六进制到十进制 (中间IP文本)
.如果真 (查询值 < 中间IP数值)
  .如果真 (结束位置 - 初始位置 = 1)
    返回 (初始位置)
  .如果真结束
  返回 (二分法确定位置 (文件号, 基址, 初始位置, 中间位置, 查询值))
.如果真结束
.如果真 (查询值 > 中间IP数值)
  返回 (二分法确定位置 (文件号, 基址, 中间位置, 结束位置, 查询值))
.如果真结束
.如果真 (查询值 = 中间IP数值)
  返回 (中间位置)
.如果真结束
返回 (0)

.子程序 取地区文本, 文本型
.参数 文件号, 整数型
.参数 地区偏移, 整数型
.局部变量 首字节集, 字节集
.局部变量 偏移, 整数型
.局部变量 国家记录, 文本型
.局部变量 地区记录, 文本型
.局部变量 长度, 整数型

' 参考 //www.jb51.net/net/200504/4715.html
移动读写位置 (文件号, , 地区偏移)
首字节集 = 读入字节集 (文件号, 1)
.判断开始 (首字节集 = { 1 }) ' 模式1的国家记录后面不会再有地区记录
  偏移 = 取字节集数据 (读入字节集 (文件号, 3), #整数型, )
  国家记录 = 读国家记录 (文件号, 偏移, 长度)
  偏移 = 偏移 + 长度

  地区记录 = 读地区记录 (文件号, 偏移)

.判断 (首字节集 = { 2 }) ' 模式2的国家记录后会有地区记录
  偏移 = 取字节集数据 (读入字节集 (文件号, 3), #整数型, )
  国家记录 = 读国家记录 (文件号, 偏移, 长度)
  偏移 = 地区偏移 + 4
  地区记录 = 读地区记录 (文件号, 偏移)
.默认
  偏移 = 地区偏移
  国家记录 = 读国家记录 (文件号, 偏移, 长度)

  偏移 = 偏移 + 长度
  地区记录 = 读地区记录 (文件号, 偏移)
.判断结束

.如果真 (到大写 (删首尾空 (地区记录)) = “CZ88.NET”)
  地区记录 = “”
.如果真结束
.如果真 (地区记录 = “” 且 国家记录 ≠ “”)
  返回 (国家记录)
.如果真结束
.如果真 (地区记录 ≠ “” 且 国家记录 = “”)
  返回 (地区记录)
.如果真结束
.如果真 (国家记录 = 地区记录)
  返回 (国家记录)
.如果真结束
返回 (国家记录 + “ ” + 地区记录)

.子程序 读国家记录, 文本型
.参数 文件号, 整数型
.参数 地区偏移, 整数型
.参数 长度, 整数型, 参考, 记录所占的长度
.局部变量 首字节集, 字节集
.局部变量 偏移, 整数型
.局部变量 国家记录, 文本型
.局部变量 记录长度, 整数型

移动读写位置 (文件号, #文件首, 地区偏移)
首字节集 = 读入字节集 (文件号, 1)
.如果 (首字节集 = { 2 }) ' 第2次重定向一定是模式2
  偏移 = 取字节集数据 (读入字节集 (文件号, 3), #整数型, )
  移动读写位置 (文件号, #文件首, 偏移)
  首字节集 = 读入字节集 (文件号, 1)
  .如果 (首字节集 = { 2 } 或 首字节集 = { 1 }) ' 可能有错误,不管了
    偏移 = 取字节集数据 (读入字节集 (文件号, 3), #整数型, )
    移动读写位置 (文件号, #文件首, 偏移)

  .否则
    ' 不是重定向
    移动读写位置 (文件号, #现行位置, -1) ' 移动回去 上面读过一字节数据了

  .如果结束
  国家记录 = 读入文本 (文件号, )
  长度 = 4
.否则
  ' 不是重定向
  移动读写位置 (文件号, #现行位置, -1) ' 移动回去 上面读过一字节数据了
  国家记录 = 读入文本 (文件号, )
  记录长度 = 取文本长度 (国家记录)
  长度 = 记录长度 + 1
.如果结束
返回 (国家记录)

.子程序 读地区记录, 文本型
.参数 文件号, 整数型
.参数 地区偏移
.局部变量 首字节集, 字节集
.局部变量 偏移, 整数型
.局部变量 地区记录, 文本型

移动读写位置 (文件号, #文件首, 地区偏移)
首字节集 = 读入字节集 (文件号, 1)
.如果 (首字节集 = { 1 } 或 首字节集 = { 2 }) ' 对于地区记录,模式1和模式2是一样的
  偏移 = 取字节集数据 (读入字节集 (文件号, 3), #整数型, )
  移动读写位置 (文件号, #文件首, 偏移)
  首字节集 = 读入字节集 (文件号, 1)
  .如果 (首字节集 = { 1 } 或 首字节集 = { 2 }) ' 再来判断下是否是重定向,安全第一
    偏移 = 取字节集数据 (读入字节集 (文件号, 3), #整数型, )
    移动读写位置 (文件号, #文件首, 偏移)
  .否则
    ' 不是重定向
    移动读写位置 (文件号, #现行位置, -1) ' 移动回去 上面读过一字节数据了
  .如果结束

.否则
  ' 不是重定向
  移动读写位置 (文件号, #现行位置, -1) ' 移动回去 上面读过一字节数据了
.如果结束

地区记录 = 读入文本 (文件号, )
返回 (地区记录)

.子程序 IP文本转整数值, 长整数型
.参数 IP文本, 文本型
.局部变量 IP变量数组, 文本型, , "0"
.局部变量 十六进制IP文本, 文本型
.局部变量 十进制值, 长整数型
.局部变量 新ip, 文本型
.局部变量 i, 整数型
.局部变量 IP段, 文本型

IP变量数组 = 分割文本 (IP文本, “.”, )
.如果真 (取数组成员数 (IP变量数组) ≠ 4)
  新ip = 转换为IP地址 (IP文本)
  IP变量数组 = 分割文本 (新ip, “.”, )
  .如果真 (取数组成员数 (IP变量数组) ≠ 4)
    返回 (0)
  .如果真结束

.如果真结束
十六进制IP文本 = “”
.计次循环首 (4, i)
  IP段 = 取文本右边 (“00” + 取十六进制文本 (到整数 (IP变量数组 [5 - i])), 2)
  十六进制IP文本 = 十六进制IP文本 + IP段
.计次循环尾 ()
十进制值 = 十六进制到十进制 (倒转十六进制文本 (十六进制IP文本))
返回 (十进制值)

.子程序 十六进制到十进制, 长整数型
.参数 十六进制文本, 文本型
.局部变量 字节集, 字节集
.局部变量 字节集长度, 整数型
.局部变量 最终值, 长整数型
.局部变量 i, 整数型, , , 中间循环变量
.局部变量 临时数值, 整数型, , , 每一位上的值

字节集 = 到字节集 (到大写 (十六进制文本))
字节集长度 = 取字节集长度 (字节集)
.计次循环首 (字节集长度, i)
  临时数值 = 字节集 [字节集长度 - i + 1]
  .如果真 (临时数值 > 64 且 临时数值 < 71) ' A=65 F=70
    最终值 = 最终值 + (临时数值 - 65 + 10) × 求次方 (16, i - 1)
    到循环尾 ()
  .如果真结束
  最终值 = 最终值 + 到整数 (字符 (临时数值)) × 求次方 (16, i - 1)
.计次循环尾 ()
返回 (最终值) ' 本源码来自易语言资源网(www.5A5X.com)

.子程序 倒转十六进制文本, 文本型
.参数 IP地址文本, 文本型
.局部变量 计次变量, 整数型
.局部变量 临时文本, 文本型
.局部变量 结果文本, 文本型

临时文本 = IP文本补位 (IP地址文本)
.计次循环首 (4, 计次变量)
  结果文本 = 结果文本 + 取文本中间 (临时文本, 8 - 计次变量 × 2 + 1, 2)
.计次循环尾 ()
返回 (结果文本)

.子程序 IP文本补位, 文本型
.参数 IP地址文本, 文本型
.局部变量 文本长度, 整数型
.局部变量 临时文本, 文本型
.局部变量 计次变量, 整数型

临时文本 = IP地址文本
文本长度 = 取文本长度 (IP地址文本)
.如果真 (文本长度 < 8)
  临时文本 = 取重复文本 (8 - 文本长度, “0”) + 临时文本
.如果真结束
返回 (临时文本)

.子程序 十六进制文本到IP地址, 文本型
.参数 IP文本, 文本型
.局部变量 临时文本, 文本型
.局部变量 结果文本, 文本型
.局部变量 计次变量, 整数型
.局部变量 结果ip, 文本型, , "4"
.局部变量 IP地址, 文本型

临时文本 = IP文本补位 (IP文本)
.计次循环首 (4, 计次变量)
  结果文本 = 取文本中间 (临时文本, 1 + (计次变量 - 1) × 2, 2)
  IP地址 = IP地址 + 到文本 (十六进制到十进制 (结果文本)) + “.”
.计次循环尾 ()
返回 (取文本左边 (IP地址, 取文本长度 (IP地址) - 1))

以上就是全部代码实例内容,需要的朋友们参考下。

(0)

相关推荐

  • 易语言的启动qq程序写法实例

    小编来教大家如何用易语言编写一款打开QQ的程序,很简单的,适合新手学习!不懂得话可以留言我哦! 1.首先我们先新建一个windows窗口程序,修改窗口标题为QQ打开器,如图所示 2.之后我们再新建两个按钮,命名为"打开QQ""退出",如图所示. 3.我们需要在按钮1被单击下下运行,所以我们要找到QQ的安装目录,找到QQ右键点击属性,把目标栏所在的信息复制下来,如图所示. 4.我们开始编写程序,在按钮一被单击下,把刚刚复制下来的信息粘贴到运行子程序,参数一里面.在按钮

  • 易语言的qq消息轰炸软件制作

    本教程是用,易,语,言,简单的制作强大的软件刷屏,所谓刷屏和轰炸就是在聊天时短时间内发送大量无用信息,导致正常聊天不能进行! 小编分享此软件源码目的是,对于一些网络上的一些骗子,或者骚扰者进行反击,或者仅局限于娱乐(小编在此郑重声明:请勿用于其他非法用途!请遵守网络规则!否则,一切后果自负!) 1.打开易语言主界面,在主菜单找程序-新建点击后弹出如下窗口 务必选中第一个Windows窗口程序,然后确定! 之后会有一个默认的启动窗口! 2.在菜单栏找工具-支持库配置 全选-确定 如果没有配置支持库

  • 易语言获取QQ昵称和空间头像方法

    获取QQ昵称和空间头像接口 1.这个是接口:http://r.pengyou.com/fcg-bin/cgi_get_portrait.fcg?uins=[你的QQ号码]&get_nick=1&_=1438937421131 2.在上面[]里面的删除,也吧[]删除,填写上你的QQ号码就可以获取网名咯! 3.例子1:http://r.pengyou.com/fcg-bin/cgi_get_portrait.fcg?uins=1074649852&get_nick=1&_=14

  • 易语言的QQ登录开发教学

    易语言开发QQ登陆程序. 1.打开易语言程序,在程序菜单选择新建 windows窗口程序,适当的点击程序边角放大程序界面. 2.在工作夹找到标题项,更改程序的标题为 "QQ登陆". 3.在窗口组件箱中的基本组件中标签按钮,在程序界面上点击,放到合适的位置, 修改标题,做成如下图2的效果,在窗口组件箱中的基本组件中编辑框按钮, 在程序界面上点击,放到合适的位置.以同样的方法,做成下图4的效果. 4.在窗口组件箱中的基本组件中选择按钮,在程序界面上点击,放到合适的位置,修改标题为"

  • 易语言领取QQ名片赞

    领取QQ名片赞 .版本 2 .支持库 HtmlView .支持库 spec .程序集 窗口程序集_启动窗口 .子程序 _按钮_领取名片赞_被单击 超文本浏览框1.跳转 ("http://api.qq-q.cc/mpz.php?url=http://jb51.net/&tid=154&mm=10000&qq=" + 号码编辑框.内容, , ) 状态编辑框.内容 = "接口1已领取" 延迟 (5000) 超文本浏览框1.跳转 ("htt

  • 易语言输入QQ号查看头像的代码

    输入QQ号码,查看QQ头像 .版本 2 .支持库 internet .程序集 窗口程序集1 .子程序 _按钮确定_被单击 QQ头像图片框.图片 = HTTP读文件 ("http://q.qlogo.cn/headimg_dl?dst_uin=" + 编辑框账号.内容 + "&spec=640&img_type=jpg") 运行结果: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持.如

  • 易语言读取QQWary地理位置方法

    很多的功能需要查询IP地址的物理位置,这是一个前辈写好的子程序 使用方法:在自己的子程序中直接调用[IP查询("IP地址")即可,可以是变量] .版本 2 .程序集 程序集_查询IP .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码 _查询IP () ' 在初始化代码执行完毕后调用测试代码 返回 (0) ' 可以根据您的需要返回任意数值 .子程序 _查询IP ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作

  • 易语言做浏览器的方法

    各位小朋友还在为电脑浏览记录被家长监视而发愁吗,有了它,再也不用担心啦. 1.新建一个Windows窗口程序 2.尽量把窗口拉大,越大越好.并放上一个超文本浏览框,按钮.如图 3.下面复制就可以了: .版本 2.支持库 HtmlView .子程序 __启动窗口_创建完毕 超文本浏览框1.地址 = "www.baidu.com\" '在引号内输入要载入的网址 .子程序 _超文本浏览框1_即将打开新窗口, 逻辑型 超文本浏览框1.地址 = 超文本浏览框1.状态条文本返回 (假) .子程序

  • 易语言读取Word文档方法

    Office办公软件,相信大家都已经很熟悉了.如何读取Word文档内容,相信大家也都知道.但是,笔者今天要说的是,易语言怎么读取Word文档内容呢? 1.首先,为了配合此次程序测试,我们事先准备好一个Word文件即Docx文件,为了使得软件能正确读取出其中内容,我们在Word文件中,输入"百度经验"作为测试标示.如图: 2.测试文件已就位,打开"易语言",在弹出的"新建工程文件"对话框中,选择"Windows窗口程序"并点击&

  • 易语言读取文本行数的方法

    易语言 取文本行数教程 本教材使用易语言自带支持库中的"分割文本"功能取出文本行数 1.新建一个窗口程序 添加一个编辑框组件 和按钮组件 2.在工作夹中把编辑框的 是否允许多行选择"真"和滚动条选择"纵向滚动条" 3.进入代码编辑窗口 写入一下代码 .版本 2 .程序集 窗口程序集_启动窗口 .子程序 _按钮1_被单击 .局部变量 分割文本, 文本型, , "0" 分割文本 = 分割文本 (编辑框1.内容, #换行符, ) 信

  • 易语言提高安全性的方法总结

    易语言是汉化的编译软件,编译软件哦,如同,JAVA,C++,VB,等等编译软件哦,对于对英语一窍不通的人,一般都适合选择易语言进行编译软件哦,编译出来的软件也有安全性哦,下面一个方法教大家如何提高安全性. 1.首先,找到你电脑中里面的易语言软件,找到了,就说一声. 2.跟往常一样,进入易语言软件,打开一个窗口就行了. 3.找到工具,一般人我都不告诉他就在上面,可能你也会找不到的哦. 4.点击系统配置,图片上忘记标注了,不好意思,点击过后就可以进来了.然后选择3,3是最高的了. 5.下面的一般可以

  • 修改易语言界面皮肤的方法

    为你家的e语言添加一个漂亮的皮肤吧[一行代码而已] 新建一个E语言程序.[动态数据链接库] 把_启动子程序 设定为公开 里面写上 加载皮肤 这个命令 [需要模块 .自己论坛找找] 在编译的时候..软件名改为SXS.DLL即可 然后放到易语言目录 此方法支持N种工具 游戏 同时还是一个很好的注入方法哦..自动注入的.

  • 易语言插件规避杀毒软件方法

    易语言是一门计算机编程语言,非常的简单易懂,学习的时候无需英语基础即可快速入门.同时易语言的兼容性和稳定性也比较的强大,我们可以用他开发出各种平台的应用软件.网络软件.信息管理软件等等,但是由于易语言是中文编程,好多杀软都会误报,下面就教大家一个简单的方法,防止易语言误报. 1.这里就不给大家演示易语言的安装过程了,官方的语言视频教程已经很详细了,我们首先去下载下"黑月插件",直接百度,第一个就可以下载 2.下载后,我们双击运行安装(如果是win7/win8/win8.1的系统,建议大

  • 易语言查找文本的方法

    日常工作中,要查找指定文本段中的某个字词,我们有很多方法,比如:使用记事本.Word等软件的查找功能,都是可以实现的 1.首先,运行易语言主程序,在弹出"新建工程"文件对话框中,选择"Windows窗口程序"并点击"确定"按钮.进入,"Windows窗口程序"设计界面. 2.然后,在已创建好的"Windows窗口"上,绘制编辑框组件两个.按钮组件一个,调整好各组件的相对位置,以适应窗口.如图: 3.修改各组

  • 易语言更改窗口标题的方法

    本经验小谈下怎么静态更改窗口标题,以及怎么在程序运行中进发窗口标题 1.在新建的空白程序中,点击窗口的空白部分选择窗体 2.在左侧列表下方选中"属性"面板 3.在窗体属性面板中找到"标题"属性,在该属性对应的输入框中输入想要更改的标题,这就是易语言静态更改窗口标题的方法 1.易语言动态更改窗口标题 在新建的空白程序中,双击窗体的空白区域,进入代码编辑面板 2.在"__启动窗口_创建完毕"子程序下,输入:_启动窗口.标题 = "想要更改的

  • 易语言爬取网页内容方法

    写个辅助工具的时候需要提取网页里面的某些内容,我这里便把方法告诉大家,希望对大家有所帮助,记得投票给我哦! 1.在新建的windos窗口程序中画: 两个编辑框.一个按钮. 再添加模块如图中三步! 我们来实现,在一个编辑框中输入网址后,点击按钮,然后取到指定内容到编辑框2中. 2.比如我们来取百度某贴吧一个帖子内的内容!如下图中的"跑遍数码城,XXXXX". 我们在该页面上右键---->查看网页源码(或查看源文件). 3.在打开的源文件内容中按CTRL+F组合键查找"跑遍

随机推荐