梦殇国际

标题: 贴吧又可以查IP了 特来分享一下编程思路和部分算法 [打印本页]

作者: STiG    时间: 2014-4-13 23:28
标题: 贴吧又可以查IP了 特来分享一下编程思路和部分算法
本帖最后由 STiG 于 2014-4-13 23:33 编辑

获取user_ip 这个很简单 基本上都会吧
查一下ID所在帖子的网页源码 就能找到一串数字
算法和之前的一样 转换成16进制 然后分4段转回10进制 最后颠倒一下顺序 就能得到IP地址了
但是这样挺费时费力的 于是抽空用VB写了这个东西 输入帖子地址和ID 就可以直接获取到IP

基本的东西很简单 不用多说 先用最简单的webbrowser控件载入帖子页面

然后遍历ID 这里要说一下 度娘把ID里面的中文字全部转换成Unicode16进制编码显示了 英文字母 数字 符号保持不变
为了将ID成功转换为度娘接受的模式 我特别翻了一下Unicode编码表 得知英文字母 数字 符号的编码是从32到126 所以条件这样写:

For i = 1 To Len(Text2.Text) 'ID逐字转换
  If AscW(Mid(Text2.Text, i, 1)) > 31 And AscW(Mid(Text2.Text, i, 1)) < 127 Then 'AscW将字符转换为Unicode10进制编码
    j = j & Mid(Text2.Text, i, 1) '如果字符的编码是从32到126 那就不用转换 直接读取到变量j里面
  Else
    j = j & "\u" & LCase(Hex(AscW(Mid(Text2.Text, i, 1)))) '反之 转换为Unicode16进制编码并小写再读取到变量j里面
  End If
Next '最终得出的j便是度娘可接受的模式了 这样 我们便可以用这个j来做遍历了

为什么要遍历ID 不直接遍历user_ip 然后再根据几楼来确定
那是因为user_ip不是在body里面 一个ID只会有一个user_ip
如果一个帖子里面 一个ID回复了两次或者两次以上 那么就根本无法使用几楼来确定了

k = InStr(WebBrowser1.Document.documentelement.innerhtml, j) '首先查找ID起始于整个页面的第几个字符 赋值给k
k = InStr(k - 33, WebBrowser1.Document.documentelement.innerhtml, "user_ip")
  ' 往前退33个字符(user_ip是在ID的前面 这个33是我随便写的 当时没去数要退多少个) 然后找到"user_ip"起始位置  
a = Val(Mid(WebBrowser1.Document.documentelement.innerhtml, k + 9, 10))
  ' 然后再往后进9个字符(user_ip":一共9个字符) 用Mid获取10个字符(FFFFFFFF转换为10进制是4294967295 最多10个字符)
  ' 少一两个字符也不怕 Val可以强制转换为数字变量 然后复制给a 这个a自然就是那个需要转换的IP地址了

这里开始才是算法的核心 一开始我也以为很简单 用Hex函数直接把10进制数转换为16进制不就行了 后来发现 没这么简单
问题在于Hex函数最多只能转换Long型整数 VB中Long型最大值才2147483647 远低于4294967295(早知道就不用VB写了 坑爹)
于是我自己写了一个算法 这里用到了10进制转2进制的思路 先算末位

b = a / 16 'a就是刚刚的user_ip 除以16 这里VB自动识别成浮点型的除法 明显不会再和Long型扯上什么关系了
c = InStr(b, ".") '如果不能被整除 那么b自然就是一个小数 于是找到小数点
e = a - Mid(b, 1, c - 1) * 16 '获取整数部分 乘以16 然后用a去减 就能得出余数了 这个余数就是user_ip 16进制的末位
If e = 10 Then
  e = "A"
ElseIf e = 11 Then
  e = "B"
ElseIf e = 12 Then
  e = "C"
ElseIf e = 13 Then
  e = "D"
ElseIf e = 14 Then
  e = "E"
ElseIf e = 15 Then
  e = "F"
End If '这里按照16进制的表示法来 然后这样:

d = Hex(Mid(b, 1, c - 1)) & e
'这里要注意的是 就算最大4294967295 除以16也会远小于Long型的限制 所以我们放心使用Hex函数吧
'获取前面的16进制位数 然后加上最后一位

好了 这个时候 这个d就是user_ip 16进制的表现形式 然后我们要分段 颠倒一下顺序 就能获取IP地址了 这个我写在一个循环里面了

For i = Len(d) To 1 Step -2 '步频-2 每次减2 两位为一段 倒序读取 重新转换为10进制
  If i = 1 Then '有时候得出的d是7位 那么明显就是ip的最后一位只用一个16进制数表示 前面三段如果出现这种情况都会加一个0
    Text3.Text = Text3.Text & CLng("&H" & Mid(d, i, 1))
  Else
    Text3.Text = Text3.Text & CLng("&H" & Mid(d, i - 1, 2))
    If i > 2 Then
      Text3.Text = Text3.Text & "." '别忘了IP地址里面的点
    End If
  End If
Next

搞定 各位可以按照我的思路去试试 估计再过一段时间 这个user_ip的BUG又得修复了 到时候咱再想办法



作者: 倪金琦    时间: 2014-4-13 23:31
我看不懂怎么办

作者: smoke    时间: 2014-4-13 23:33
看一堆乱码就头晕

作者: 木犀    时间: 2014-4-13 23:37
又遇 技术帝 睡觉明天研究

作者: 新人路过    时间: 2014-4-13 23:37
看不懂的给跪了。。。。。电脑小白的我。。。

作者: 7Win    时间: 2014-4-13 23:50
不懂 坐等机器

作者: 雪莉    时间: 2014-4-14 00:37
又遇 技术帝

作者: STiG    时间: 2014-4-14 08:55
有这些东西 机器做起来很简单

作者: rgergeraga    时间: 2014-4-14 17:30
大神求机器

作者: 深蓝    时间: 2014-4-14 17:30
看不懂  给跪了。

作者: 家里虐    时间: 2014-4-14 18:31
屌炸天

作者: 闷油瓶    时间: 2014-4-15 00:40
好复杂,看不懂,能帮我查个IP吗?

作者: jikedamowang    时间: 2014-4-15 16:17
求做成机器

作者: beisuwind    时间: 2014-4-15 16:53
这个还是只能查主题ID吗?如果对方没有发过主题能查吗?

作者: STiG    时间: 2014-4-15 18:08
beisuwind 发表于 2014-4-15 16:53
这个还是只能查主题ID吗?如果对方没有发过主题能查吗?

不是 主题 或者回复 楼中楼都可以查

作者: STiG    时间: 2014-4-15 18:08
beisuwind 发表于 2014-4-15 16:53
这个还是只能查主题ID吗?如果对方没有发过主题能查吗?

I贴吧 空间都可以查哦 方法回头公布

作者: 草米小鸡    时间: 2014-4-15 18:11
不明觉屌→_→
作者: c15884    时间: 2014-4-16 19:26
楼主能不能编写一个程序,方便初学者使用。

作者: 因为是你    时间: 2014-4-17 08:03
看到这么多代码  给跪了。

作者: xiaoqi22889    时间: 2014-4-17 13:38


作者: 剑出鞘    时间: 2014-4-18 12:58
好嗲/////

作者: 深拥不离    时间: 2014-4-18 19:54
看不懂啊

作者: wukong    时间: 2014-4-19 12:04
还是等机器吧

作者: chcbj    时间: 2014-4-29 16:29
楼主能不能编写一个程序,方便初学者使用。


作者: East3    时间: 2014-4-29 19:08
VB看不懂,有E源码没

作者: 神樂    时间: 2014-5-3 00:36
头晕

作者: 十年!    时间: 2014-5-6 17:35
点个赞

作者: 爱情岛    时间: 2014-5-6 17:37
        赞            

作者: 男儿仗剑走天下    时间: 2014-5-6 19:41
这个太麻烦,之前查过一次
作者: 懿Angel    时间: 2014-5-6 20:56
看着代码好多

作者: 凡人大修真    时间: 2014-5-7 17:19
看不懂,,,,过来看看顺便水经验

作者: shallot    时间: 2014-5-12 12:53
看不懂好忧伤

作者: HibariRinne    时间: 2014-5-12 21:15
围观

作者: 学不会    时间: 2014-5-26 05:12
太长

作者: 暴动    时间: 2014-5-26 09:20
坐等机器了
作者: 蜀国之神将    时间: 2014-5-28 18:44
头晕头晕头晕

作者: 洛依沫    时间: 2014-6-6 02:41
为何这么吊

作者: 闭眼说再见    时间: 2014-6-19 13:46
表示完全看不懂啊

作者: 弄死楼主    时间: 2014-6-19 18:32
哈哈哈哈

作者: 黑木耳    时间: 2014-6-30 16:36
求软件

作者: 秋_本明    时间: 2014-7-1 09:36
收藏先再慢慢学习
作者: 倾冷月    时间: 2014-7-1 21:28
好厉害啊
作者: 8040888    时间: 2014-7-13 00:03
大神!真的有用

作者: rxhzpc    时间: 2014-11-23 19:14
绝对好东西啊

作者: aniusg    时间: 2015-8-20 08:31
谢谢学习了

作者: 陪    时间: 2015-8-20 09:04
看不懂





欢迎光临 梦殇国际 (https://714.hk/) Powered by Discuz! X3.4