• 4671阅读
  • 144回复

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

上一主题 下一主题
离线zhangjingyu

只看该作者 69楼 发表于: 2025-12-07 20:45:28 星期日  点亮(0)
看了下包含“ipfrom”的文件,(如果需要处理ip归属)主要的应该是下面4个:
require/postmodify.php pw_tmsgs
lib/forum/topicpost.class.php pw_tmsgs
lib/forum/replypost.class.php pw_posts
lib/forum/postmodify.class.php pw_posts
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 70楼 发表于: 2025-12-07 22:17:53 星期日  点亮(0)
回复63楼 zhangjingyu 的帖子
zhangjingyu <?php
    // 此处填写你在控制台-应用管理-创建应用后获取的AK
    $ak = '您的AK';
    
    // 发起一个http get请求,并返回请求的结果
....... (2025-12-07 10:35)
这个例子本地测试了下,基本没有改动,结果是打开了最终组合后的页面,也就是我们最初想要访问的页面。https://www.ip138.com/iplookup.asp?ip=58.242.38.155&action=2

拆分之后再组合,我感觉玩了个寂寞。不过,倒也理解了一点点 http_build_query传递参数的相关知识。
<?php
require_once ('../global.php');//保存在一级子目录用这行
global $db_olsize,$windid,$onlineip;

function request_get($url = '', $param = array()) {
        if (empty($url) || empty($param)) {
            return false;
        }
        
        $getUrl = $url . "?" . http_build_query($param);
        $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_TIMEOUT, 1000); // 设置超时时间1秒
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0); // curl不直接输出到屏幕
        curl_setopt($curl, CURLOPT_HEADER, 0); // 设置header
        $data = curl_exec($curl); // 运行curl
        if (!$data) {
            print("an error occured in function request_get(): " . curl_error($curl) . "\n");
        }
        curl_close($curl);
        
        return $data;
    }
    // 请求地址
    $url = 'https://www.ip138.com/iplookup.asp';
    
    // 构造请求参数
    $param['ip']   = '58.242.38.155';
    $param['action']   = '2';

     //完整地址示例,http_build_query($param)把参数组合起来
     //$getUrl = $url . "?" . http_build_query($param);
     //https://www.ip138.com/iplookup.asp?ip=58.242.38.155&action=2   

    $res = request_get($url, $param);

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

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

只看该作者 71楼 发表于: 2025-12-07 23:03:18 星期日  点亮(0)
可惜了,三个例子并没有多少实际性的收获,还得慢慢研究。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 72楼 发表于: 2025-12-07 23:31:54 星期日  点亮(0)
换个思路,php有没有查看网页源代码的函数,然后我们从源码中查找我们需要的内容?
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 73楼 发表于: 2025-12-08 14:23:34 星期一  点亮(0)
经过从上午到现在的努力,终于有点成绩了。简单说,就是已经能够从页面分离出ip地址对应的地理位置了,比如“安徽省合肥市巢湖市 联通”(对应的ip是58.242.38.155,也就是前面说的登录ip)。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 74楼 发表于: 2025-12-08 14:29:50 星期一  点亮(0)
我一直以为php输出的源码就是我们右键查看网页所看到的html源代码,可事实上可能两者完全不同。
理解 CURLOPT_RETURNTRANSFER
在 PHP 的 cURL 库中,CURLOPT_RETURNTRANSFER 选项用于控制 cURL 传输的结果。当设置为 true 时,它会将传输结果作为字符串返回,而不是直接输出到当前脚本的标准输出中。这允许程序员捕获 cURL 传输的输出,并根据需要进行进一步处理。
70楼的代码,运行后如图所示,跟我们正常看到的页面可以说没有区别。于是,我认为这个根本就不是什么所谓的源码,根本就看不到什么字符串。

于是,上午反复的搜索查找能让php页面显示源码的函数、方法等,就是我们看到的html源码样式的,可就是找不到。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 75楼 发表于: 2025-12-08 15:21:28 星期一  点亮(0)
最后,没办法,只能另想它法。由于看不到php页面的源码,又没有其它的办法,只能尝试搜索页面。

我们看到页面中有“ASN归属地”,于是以它为关键词搜索它首次出现的位置,似乎没有结果。又缩小为“ASN”,终于得到了一个数字,真的有进步啊!再然后截取页面,终于又进了一步!然而,无论如何调整截取的范围都无法把logo后面的部分去掉。
$begin=strpos($res,'ASN');
$end=$begin+50;
$str=substr($res,$begin,$end);//截取页面
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 76楼 发表于: 2025-12-08 15:30:44 星期一  点亮(0)
那就再次搜索截取。搜索的关键词是“div”(它出现在查询结果,地理位置的前面),又得到一个数字。于是把上面截取后的结果再次截取,从开始截取到刚刚得到的数字,于是logo后面的部分终于不见了。
$begin2=strpos($str,'div');
$str2=substr($str,0,$begin2);//再次截取页面
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 77楼 发表于: 2025-12-08 15:41:13 星期一  点亮(0)
ASN归属地":"安徽省合肥市巢湖市 联通 ", "iP段":"58.242.38.0 - 58.242.38.255", "兼容IPv6地址":"::3AF2:269B", "映射IPv6地址":"::FFFF:3AF2:269B", "ip_c_list":[{"begin":988947968, "end":988948223, "ct":"中国", "prov":"安徽省", "city":"合肥市", "area":"巢湖市", "idc":"", "yunyin":"联通", "net":""}], "zg":0}; var ip_begin = 988948123; <
得到这样的字符串,接下来的工作就不是很难了,慢慢的打散就能把里面的地理位置提取出来。然而,以这个字符串在本地测试打散时出现了一点意外。大概是出现了乱码,于是又研究如何转换编码。
        // 检测字符的编码格式
        $encode = mb_detect_encoding($string, array('ASCII','UTF-8','GB2312','GBK','BIG5'));
        echo $encode;

        // 转换编码格式
        if ($encode == 'UTF-8'){
            $string = iconv('UTF-8','GBK',$string);
        }
起初,我们得到的编码是UTF-8,就用上面的代码转换为gbk。然而,后来测试时不知道怎么的又变成了“EUC-CN”。搜索它,是这样说的:
GB2312最常用的表示方法
EUC-CN是GB2312字符编码标准的一种实现方式,在浏览器编码表中常以“GB2312”名称指代,采用双字节编码结构 [1] [4]。该编码兼容ASCII字符集,通过区位码转换机制将汉字映射至特定编码 [3-4]。
作为GB2312在Windows系统中的常见实现,EUC-CN被用于记事本文件编码转换及字幕文件解码场景 [1-2]。其编码体系基于ISO2022标准,使用94x94字符平面定义6763个汉字及682个符号,同时支持厂商扩展字符 [3] [5]。相较于HZ和ISO-2022-CN等7位编码方案,EUC-CN直接采用8位编码空间实现汉字表示 [3]
后来的测试中不转码也行,因为和论坛的gbk应该没有什么太大的区别。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 78楼 发表于: 2025-12-08 15:47:42 星期一  点亮(0)
测试代码备份下:
  1. <?php
  2. require_once ('../global.php');//保存在一级子目录用这行
  3. global $db_olsize,$windid,$onlineip;
  4. /******
  5. $url='https://www.ip138.com/iplookup.asp?ip=112.37.131.176&action=2';
  6. $sourceCode = file_get_contents($url);
  7. $file = fopen("source.html", "w");
  8. fwrite($file, $sourceCode);
  9. fclose($file);
  10. *******/
  11. function request_get($url = '', $param = array()) {
  12.         if (empty($url) || empty($param)) {
  13.             return false;
  14.         }        
  15.         $getUrl = $url . '?' . http_build_query($param);
  16.         $curl = curl_init(); // 初始化curl
  17.         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查  
  18.         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在
  19.         curl_setopt($curl, CURLOPT_URL, $getUrl); // 抓取指定网页
  20.         curl_setopt($curl, CURLOPT_TIMEOUT, 1000); // 设置超时时间1秒
  21.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl不直接输出到屏幕
  22.         curl_setopt($curl, CURLOPT_HEADER, 0); // 设置header
  23. curl_setopt($ch, CURLOPT_ENCODING, ''); // 启用 gzip/deflate 解码
  24.         $data = curl_exec($curl); // 运行curl
  25.         curl_close($curl);
  26.         
  27.         return $data;
  28.     }
  29.     // 请求地址
  30.     $url = 'https://www.ip138.com/iplookup.asp';
  31.     
  32.     // 构造请求参数
  33.     $param['ip']   = '58.242.38.155';
  34.     $param['action']   = '2';
  35.      //完整地址示例,http_build_query($param)把参数组合起来
  36.      //$getUrl = $url . "?" . http_build_query($param);
  37.      //https://www.ip138.com/iplookup.asp?ip=58.242.38.155&action=2  
  38.     $res = request_get($url, $param);
  39. $begin=strpos($res,'ASN');
  40. $end=$begin+50;
  41. $str=substr($res,$begin,$end);//截取页面
  42. $begin2=strpos($str,'div');
  43. $str2=substr($str,0,$begin2);//再次截取页面
  44. $str3=explode(',',$str2);
  45. $str3=explode('"',$str3[0]);
  46. $wulidizhi=$str3[2];
  47. $encode = mb_detect_encoding($str2, array('ASCII','UTF-8','GB2312','GBK','BIG5'));//EUC-CN
  48. if ($encode == 'UTF-8'){
  49.             $string = iconv('UTF-8','GBK',$str2);
  50.         }
  51.          echo ($wulidizhi. "\n". $windid."\n".$onlineip);
  52. ?>
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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