• 5755阅读
  • 200回复

关于帖子阅读页显示的ip地址来源(SQL 语句) [复制链接] [手机版]

上一主题 下一主题
离线zhangjingyu

只看楼主 倒序阅读 使用道具 绿 楼主  发表于: 2020-07-26 19:43:36 星期日
位置:帖子阅读页楼层的最上面,如:
楼主  发表于: 2020-07-17 23:31:23 IP:112.38.62.197(后台阅读页设置“显示帖子IP来源”功能关闭时前台显示的样子)
或者:
楼主  发表于: 2020-07-17 23:31:23 来自:江苏省 移动(后台阅读页设置“显示帖子IP来源”功能开启时前台显示的样子)

点击上面的“IP:112.38.62.197”或者“来自:江苏省 移动”都会有一个弹出框提示“IP:112.38.62.197 - 来自:江苏省 移动”(下面还有一个“禁止此ip”的管理链接)。


然而,这个ip地址来源显示得并不准确。因为ip地址段经常的会有变化,有回收,再分配等,具体怎么个流程不知道。总之,变是永远的不变。

前两天,顾兄在帖子中回复我说:
9楼 发表于: 2020-07-20 23:12:39  点亮(0) 来自:江苏省 移动  编辑
“用着用着就忘了用”,正常。

你到江苏了也不说下。
http://www.vtu425.com/read.php?tid=2824&ds=1&page=2#36294

于是,我也继续回复到:
“10楼 发表于: 2020-07-21 09:12:11  点亮(0) 来自:江苏省 移动  编辑
彼此,彼此。  

“10楼ip地址112.28.189.156来自安徽省合肥市 移动
论坛这个让ip地址显示为具体(大致)位置的功能,好多年前修改的(不记得怎么改的了),数据库不准确。

“显示不准确,鸡肋都不算。”

于是,后台关闭了“显示帖子IP来源”功能,只显示ip地址。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 置顶 (来自143楼) 发表于: 2025-12-21 20:11:24 星期日  点亮(0)
—— 管理操作 •  zhangjingyu 执行 帖内置顶 操作 (2026-04-01 20:57) ——
1.后台添加“IP归属选择”开关,网络方式为从chinaz.com查询获得地理位置信息,本地方式为从本地数据库文件中查询。

2.在require/common.php文件里添加自定义函数,数据的处理都在这里:
    function getipguishu($onlineip) {//2025.12.21
    $getUrl = 'https://ip.tool.chinaz.com/'.$onlineip;
    $curl = curl_init(); // 初始化curl
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在
    curl_setopt($curl, CURLOPT_URL, $getUrl); // 抓取指定网页
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl不直接输出到屏幕
    curl_setopt($curl, CURLOPT_HEADER, 0); // 设置header
    $data = curl_exec($curl); // 运行curl
    curl_close($curl);

    $begin=strpos($data,'items-center');
    $end=$begin+100;
    $str=substr($data,$begin,$end);//截取页面

    $encode = mb_detect_encoding($str, array('ASCII','UTF-8','GB2312','GBK','BIG5'));
    $string =mb_convert_encoding($str,'GBK',$encode);//使用iconv函数转码在空间论坛无效

    $begin2=strpos($string,'ipAddress');
    $end2=$begin2+100;
    $str2=substr($string,$begin2,$end2);//再次截取页面
    $str3=explode('>',$str2);
    $str4=explode('<',trim($str3[1]));
    $wulidizhi=trim($str4[0]);
    $guishu=str_replace('-','',$wulidizhi);
        return $guishu;
}

3.修改文件
lib/forum/topicpost.class.php pw_tmsgs
lib/forum/replypost.class.php pw_posts
lib/forum/postmodify.class.php pw_posts

(1)添加变量:global $db_cvtime, $db_ptable, $onlineip, $db_plist,$db_ipguishu;
(2)获取数据:$guishu=getipguishu($onlineip);//2025.12.21
(3)根据后台开关,判断用网络还是本地方式更新数据
//$ipfrom = $ipTable->getIpFrom($onlineip);
$ipfrom = $db_ipguishu ? $guishu : $ipTable->getIpFrom($onlineip);
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 置顶 (来自17楼) 发表于: 2020-07-28 09:25:00 星期二  点亮(0)
回复13楼 zhangjingyu 的帖子
—— 管理操作 •  zhangjingyu 执行 帖内置顶 操作 (2020-07-28 09:35) ——
zhangjingyu 刚刚打开本地的数据库管理软件,帖子回复表pw_posts里面确实有ipfrom字段,里面记录着的当然就是ip地址来源(归属)了。竟然真有这个字段!自己确实疏忽了!疏忽了问题产生的原因,疏忽了对ip地址库的维护! (2020-07-28 09:06)   
上传个截图吧。

主题内容表pw_tmsgs也有同样的ipfrom字段,所以之前的错误数据(指已经“记录在案”的ip地址来源)无法更改了。

ip地址库文件重命名为ipdata.dat(20200725版本)已经上传到ipdata目录。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 沙发  发表于: 2020-07-26 20:19:06 星期日  点亮(0)
就像我在帖子中回复说的“显示不准确,鸡肋都不算”。ip地址来源显示不准确,那还有什么用呢?好长时间以前就发现了,可是具体什么时候改的,到底怎么改的,真的不知道,毕竟时间过去太久了。

今天下午决定研究下。因为经测试,ip138网站查询结果页面还算过得去,例如我的ip地址查询结果为“山东省聊城市莘县 移动”,竟然相当的准确。
https://www.ip138.com/iplookup.asp?ip=112.38.62.212&action=2

只要替换里面的ip地址就可以,而这个ip地址非常方便的可以获取到,因为楼层上面就有啊。修改文件的话,可以非常方便的自动代入。这样,就可以在点击ip地址或ip地址来源的弹出框中“禁止此ip”的管理选项后面再加一个如“查看ip来源”的链接,就可以非常方便的查询到基本准确的结果了。

这个可以尝试修改下,这是后话,下面继续更新。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 板凳  发表于: 2020-07-26 20:41:42 星期日  点亮(0)
文件检索“禁止此ip”,默认模板文件夹下ajax_masingle.htm文件中:
<!--
EOT;
} elseif ($action == 'viewip') {print <<<EOT
-->
<div>
    <div class="p10">IP:$readdb[userip] - 来自:$readdb[ipfrom]</div>
<!--
EOT;
    if (in_array($readdb['userip'], $bannedIps)) {print <<<EOT
-->
    <div class="popBottom">此IP已禁止<a href="javascript:" onclick="sendmsg('masingle.php?action=banuserip&fid=$fid&tid=$tid&pid=$pid&ajax=1&restore=1', '');return false;" class="s4">[恢复]</a></div>
<!--
EOT;
    } else {print <<<EOT
-->
    <div class="popBottom"><a href="javascript:" onclick="sendmsg('masingle.php?action=banuserip&fid=$fid&tid=$tid&pid=$pid&ajax=1', '');return false;" class="s4">[禁止此IP]</a></div>
继续检索“ipfrom”,结果有150多个文件,经过筛选,确定应该是lib/utility/iptable.class.php。因为看文件名,就应该是和ip地址有关的。打开文件,有这样一句:
$this->fullipfile = $this->dirName.'/QQWry.dat';//纯真ip
没错,就是这个文件了!

经过和原始论坛安装文件进行对比,确认就是这个文件。虽然是dat文件后缀,但确实是一个数据库文件,只是里面的内容无法查看,需要特殊的软件吧。再看同文件夹下的文件,有一个20150720iptable.class.php,经对比就是没有修改过的原始安装文件。重命名需要修改的文件做备份,以方便日后恢复或者对比查询修改过的地方,算是一个习惯吧,也可以说是一个好习惯。从日期上看,就知道是2015年7月20日修改的文件。遥想2011年我们的家园论坛初装,那时候8.7应该没出来多长时间,4年后才修改的这个显示ip地址来源的功能,可以说够可以了。如今,又5年多过去了,曾经实现的功能不再完美,还得继续修改啊。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 地板  发表于: 2020-07-26 21:39:04 星期日  点亮(0)
文件改动并不算太大,$this->indexFile = R_P . 'ipdata/ipindex.dat';
替换成了:
        $this->indexFile = D_P . 'data/bbscache/ipIndex.bin';
        $this->fullipfile = $this->dirName.'/QQWry.dat';//纯真ip
也就是indexFile文件由ipindex.dat重新指定为缓存目录下的ipIndex.bin,然而后面的这个文件似乎不存在(无法生成?);
新增了fullipfile,也就是指定了数据库文件所在。再后面新增的代码,就是从这个数据库文件中查询ip地址对应的具体属地,只是看不懂啥意思。

印象中很可能就修改了这么一个文件(当然需要上面的数据库文件支持,这才是重点),而且今天下午也从网上找到了最新的纯真ip数据库,这就增加了无限可能,但具体能否成功,还未可知。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 4楼 发表于: 2020-07-26 21:56:29 星期日  点亮(0)
经本地测试,似乎直接替换为最新的数据库文件并不能让ip地址显示得准确些(没有更新),看来还是要有一段路要走啊。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 5楼 发表于: 2020-07-26 22:18:52 星期日  点亮(0)
回复1楼 zhangjingyu 的帖子
zhangjingyu 就像我在帖子中回复说的“显示不准确,鸡肋都不算”。ip地址来源显示不准确,那还有什么用呢?好长时间以前就发现了,可是具体什么时候改的,到底怎么改的,真的不知道,毕竟时间过去太久了。

今天下午决定研究下。因为经测试,ip138网站查询结果页面还算过得去,例如我的ip地址 .. (2020-07-26 20:19)
最后面说的“可以在点击ip地址或ip地址来源的弹出框中“禁止此ip”的管理选项后面再加一个如“查看ip来源”的链接”已经在本地测试成功。如图:

尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 6楼 发表于: 2020-07-26 22:38:23 星期日  点亮(0)
修改文件为默认模板文件ajax_masingle.htm
<div class="popBottom"><a href="javascript:" onclick="sendmsg('masingle.php?action=banuserip&fid=$fid&tid=$tid&pid=$pid&ajax=1', '');return false;" class="s4">[禁止此IP]</a>
的后面添加:  <a href="https://www.ip138.com/iplookup.asp?ip={$readdb[userip]}&action=2" target="blank">[查询IP地址来源]</a>
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 7楼 发表于: 2020-07-27 05:48:43 星期一  点亮(0)
晚上看看帖子回复表,里面应该记录了回帖ip地址,但ip来源应该没记录在里面。如果有,那之前的自然无法改了,但按说不应该,而是实时查询,但这样又会不会增加查询量?不知道,看看数据表再说吧。

——本帖通过回复.
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!