当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 13 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 纯真ip数据库的perl。
帖子发表于 : 2008-03-10 23:52 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
ipwhere函数部分,完全是别人的改的。别找我版权。我乱找的。
加到opera菜单的,不要我说了吧。很多例子了。


代码:
☎  cat ip.pl
#!/usr/bin/perl -w

use strict;

sub ipwhere {
#        my $ipbegin,$ipend,$ipData1,$ipData2,$DataSeek,$ipFlag;
        my $ipbegin;
        my $ipend;
        my $ipData1;
        my $ipData2;
        my $DataSeek;
        my $ipFlag;

        my $ipAddr1;
        my $ipAddr2;

        my $ip=$_[0]; #"59.33.209.104"; #shift;
        my @ip=split(/\./,$ip);
        my $ipNum = $ip[0]*16777216+$ip[1]*65536+$ip[2]*256+$ip[3];

        my $ipfile="./QQWry.Dat";
        open(FILE,"$ipfile");
        binmode(FILE);
        sysread(FILE,$ipbegin,4);
        sysread(FILE,$ipend,4);
         $ipbegin=unpack("L",$ipbegin);
         $ipend=unpack("L",$ipend);
        my $ipAllNum = ($ipend-$ipbegin)/7+1;

        my $BeginNum=0;
        my $EndNum=$ipAllNum;

        Bgn:
        my $Middle= int(($EndNum+$BeginNum)/2);

        seek(FILE,$ipbegin+7*$Middle,0);
        read(FILE,$ipData1,4);
        my $ip1num=unpack("L",$ipData1);
        if ($ip1num > $ipNum) {
                $EndNum=$Middle;
                goto Bgn;
        }

        read(FILE,$DataSeek,3);
        $DataSeek=unpack("L",$DataSeek."\0");
        seek(FILE,$DataSeek,0);
        read(FILE,$ipData2,4);
        my $ip2num=unpack("L",$ipData2);
        if ($ip2num < $ipNum) {
                goto nd if ($Middle==$BeginNum);
                $BeginNum=$Middle;
                goto Bgn;
        }

        $/="\0";
        read(FILE,$ipFlag,1);
        if ($ipFlag eq "\1") {
                my $ipSeek;
                read(FILE,$ipSeek,3);
                $ipSeek = unpack("L",$ipSeek."\0");
                seek(FILE,$ipSeek,0);
                read(FILE,$ipFlag,1);
        }
        if ($ipFlag eq "\2") {
                my $AddrSeek;
                read(FILE,$AddrSeek,3);
                read(FILE,$ipFlag,1);
                if($ipFlag eq "\2") {
                        my $AddrSeek2;
                        read(FILE,$AddrSeek2,3);
                        $AddrSeek2 = unpack("L",$AddrSeek2."\0");
                        seek(FILE,$AddrSeek2,0);
                }
                else {
                        seek(FILE,-1,1);
                }
                $ipAddr2=<FILE>;
                $AddrSeek = unpack("L",$AddrSeek."\0");
                seek(FILE,$AddrSeek,0);
                $ipAddr1=<FILE>;
        }
        else {
                seek(FILE,-1,1);
                $ipAddr1=<FILE>;
                read(FILE,$ipFlag,1);
                if($ipFlag eq "\2") {
                        my $AddrSeek2;
                        read(FILE,$AddrSeek2,3);
                        $AddrSeek2 = unpack("L",$AddrSeek2."\0");
                        seek(FILE,$AddrSeek2,0);
                }
                else {
                        seek(FILE,-1,1);
                }
                $ipAddr2=<FILE>;
        }

        nd:
        chomp($ipAddr1,$ipAddr2);
        $/="\n";
        close(FILE);

        $ipAddr2="" if($ipAddr2=~/http/i);
        my $ipaddr="$ipAddr1 $ipAddr2";
        $ipaddr =~ s/CZ88\.NET//isg;
        $ipaddr="未知地区" if ($ipaddr=~/未知|http/i || $ipaddr eq "");
        return $ipaddr;
}
sub cv {
        open(CV, "|/usr/bin/enconv") or warn("No find enconv.p\n"),
                return;
        print CV $_[0];
        close CV;
}


my $ipnow=ipwhere("${ARGV[0]}");
cv($ipnow);
print "\n";



_________________
● 鸣学


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-03-10 23:53 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
加libnotify的。也有现成的例子。别找我。


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-03-11 9:00 

注册: 2006-07-09 12:22
帖子: 1331
地址: 南京
送出感谢: 0 次
接收感谢: 1
嗯,强大的perl,强大的ee。 :D


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-03-11 9:07 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
:lol: 不错啊


_________________
关注我的blog: ε==3


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-03-11 9:14 
头像

注册: 2007-10-19 14:51
帖子: 4953
地址: 深圳
送出感谢: 0 次
接收感谢: 2
凑个份子,和你的功能一样,不过我投机取巧了,用ip138的结果的。。
代码:
$ cat python/ipaddress.py
#!/usr/bin/env python
from sys import argv
import urllib
import re

str_url='http://www.ip138.com/ips.asp'

if len(argv) != 2:
  print 'USAGE: %s IP_OR_HOSTNAME' % (argv[0])
  exit(0)

host=argv[1]

param=urllib.urlencode({'ip':host, 'action':'2'})

try:
  httpsock=urllib.urlopen(str_url, param)
  data=httpsock.read()
except:
  print 'Some error!! '

#print data
print '\n'.join(re.findall(r'<li>([^<>]*)</li>', data)).decode('GB2312').encode('UTF-8')    # <<<== Here!!

httpsock.close()



在输出结果时,加了 .decode('GB2312').encode('UTF-8') 来转码。。。。


_________________
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'


最后由 yaoms 编辑于 2008-03-14 8:00,总共编辑了 5 次

页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-03-11 20:56 

注册: 2006-01-18 15:01
帖子: 1074
送出感谢: 0 次
接收感谢: 1
shell 版本

代码:
#!/bin/bash

if [ "$#" -lt 1 ];then
   echo "Usage:$0 IP"
   exit;
fi

if ! echo $1|grep -x -P '((([01]?[0-9])?[0-9]|2([0-4][0-9]|5[0-5]))\.){3}(([01]?[0-9])?[0-9]|2([0-4][0-9]|5[0-5]))' >/dev/null
then
   echo "Usage:$0 IP"
   exit;
fi

echo "  IP:$1"
echo
echo -e "ip=$1&action=2\n---"|lynx http://www.ip138.com/ips8.asp -post_data |grep -P -o '(?<=本站主数据:).*|(?<=查询结果.:).*'|cat -n



页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-03-11 22:01 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
nnnd。 我不搞,你们就不贡献出来。
昨天,是突然觉得看ip138麻烦,而且,bash的,用w3m搞不定post。才邦蛮找这个ip库的。

下次,有好东西,早出哦。


_________________
● 鸣学


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-03-11 22:12 
头像

注册: 2007-05-08 16:26
帖子: 2058
地址: 火星内核某分子内某原子核内
系统: arch
送出感谢: 20
接收感谢: 6
我又学到东西了,虽然我目前还看不懂,不过应该快看懂了.....


_________________
笔记本 :
F208S : gentoo
A460P i3G D6 : UBUNTU + WIN7
UN43D1 : UBUNTU + WIN7
1000人超级QQ群 LINUX + WIN : 31465544 或 18210387


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2008-03-12 13:13 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
☎ echo -e "ip=59.41.108.142&action=2"|w3m -dump -no-cookie http://www.ip138.com/ips8.asp -post -|grep '数据:'
• 本站主数据:广东省广州市电信(越秀区)


_________________
● 鸣学


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2008-03-12 13:24 
头像

注册: 2007-10-19 14:51
帖子: 4953
地址: 深圳
送出感谢: 0 次
接收感谢: 2
....我以为只有我才需要这个功能阿。。。早知道,早拿出来了。。


_________________
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2008-03-14 7:32 
头像

注册: 2005-07-02 14:41
帖子: 4133
系统: Ubuntu 14.04 (Kylin)
送出感谢: 53
接收感谢: 11
有用的东西。

加精。


_________________
https://weakish.github.io


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2008-04-26 20:31 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
http://forum.ubuntu.org.cn/viewtopic.php?t=118366


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2008-04-26 20:42 

注册: 2007-03-08 19:12
帖子: 161
送出感谢: 0 次
接收感谢: 0 次
我自己当初也想办法弄了一个,放在脚本iplookup里:
代码:
#!/bin/bash
curl -s -d  "ip=$1&action=2" http://www.ip138.com/ips8.asp -o /tmp/ipsearch.html
w3m -no-cookie -dump /tmp/ipsearch.html


要查的话,就在命令行里iplookup *


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 13 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译