设为首页 收藏本站
查看: 1356|回复: 0

[经验分享] python分析nginx日志的ip(来源)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-9-2 10:51:29 | 显示全部楼层 |阅读模式
Python 脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env python
#_*_coding:utf-8 _*_
__author__ = 'gaogd'


import MySQLdb as mysql
import datetime
import sys, os, urllib2, json

db = mysql.connect(user="root",passwd="xxxx@2015",db="intest",host="192.168.10.12") #数据库连接信息
db.autocommit(True)
cur = db.cursor()
cur.execute('set names utf8')
addtime = datetime.datetime.now()

ips = {}        #ip作为字典的key,访问次数做value
iplist = []     #遍历日志中的ip,相同的ip也会记录到列表,插入数据库
fh = open("./access_test.log", "r").readlines()                                                               #我的是把日志和代码在一个目录下面
for line in fh:
    ip = line.split(" ")[0]
    print ip
    if 6 < len(ip) <=15:
        ips[ip] = ips.get(ip, 0) + 1

        alist = iplist.append(ip)
for key,value in ips.items():
    listinfo = str(ips)
    sql = 'insert into ipinfo(ipaddress,countip) value ("%s","%s")' % (key,value)
    cur.execute(sql)

def get_ip_area(ip):
    try:
        apiurl = "http://ip.taobao.com/service/getIpInfo.php?ip=%s" %ip
        content = urllib2.urlopen(apiurl).read()
        data = json.loads(content)['data']
        code = json.loads(content)['code']
        if code == 0: # success
            country=(data['country'])
            area = (data['area'])
            region = (data['region'])
            city = (data['city'])
            ip = (data['ip'])
            print(data['country']),(data['area']),(data['region']),(data['city']),(data['ip'])
            sql = 'insert into whereip (country,area,region,city,ip,time) value ("%s","%s","%s","%s","%s","%s")' % (country.encode("utf-8"),area.encode("utf-8"),region.encode("utf-8"),city.encode("utf-8"),ip.encode("utf-8"),addtime)
            cur.execute(sql)
            print 'sql:',sql
        else:
            print data
    except Exception as ex:
        print ex

if __name__ == '__main__':
    for ip in iplist:
        get_ip_area(ip)


################################################
'''


radiansdict.get(key, default=None)
返回指定键的值,如果值不在字典中返回default值

'''



测试淘宝的ip库,拿到的数据内容如下:
http://ip.taobao.com/service/getIpInfo.php?ip=66.249.65.183
QQ截图20160902105118.png
获取到的字典在http://tool.oschina.net/codeformat/json 进行格式化得到下面格式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
    "code": 0,
    "data": {
        "country": "中国",
        "country_id": "CN",
        "area": "华南",
        "area_id": "800000",
        "region": "广东省",
        "region_id": "440000",
        "city": "深圳市",
        "city_id": "440300",
        "county": "",
        "county_id": "-1",
        "isp": "电信",
        "isp_id": "100017",
        "ip": "113.97.193.87"
    }}




数据数据库语句:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
mysql> create database intest ;
Query OK, 1 row affected (0.00 sec)

mysql> use intest;
Database changed
mysql> create table ipinfo(id int auto_increment primary key,ipaddress varchar(200),countip int);
Query OK, 0 rows affected (0.22 sec)

mysql> create table whereip(id int primary key auto_increment,country varchar(100),area varchar(100),region varchar(100),city varchar(100),ip varchar(100),time datetime);
Query OK, 0 rows affected (0.20 sec)
mysql>

mysql> desc ipinfo;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| ipaddress | varchar(200) | YES  |     | NULL    |                |
| countip   | int(11)      | YES  |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> desc whereip;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int(11)      | NO   | PRI | NULL    | auto_increment |
| country | varchar(100) | YES  |     | NULL    |                |
| area    | varchar(100) | YES  |     | NULL    |                |
| region  | varchar(100) | YES  |     | NULL    |                |
| city    | varchar(100) | YES  |     | NULL    |                |
| ip      | varchar(100) | YES  |     | NULL    |                |
| time    | datetime     | YES  |     | NULL    |                |
+---------+--------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

mysql>




分析完日志查看数据库的内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> select * from whereip limit 10;
+----+---------+--------+-----------+-----------+-----------------+---------------------+
| id | country | area   | region    | city      | ip              | time                |
+----+---------+--------+-----------+-----------+-----------------+---------------------+
|  1 | 美国    |        |           |           | 66.249.65.133   | 2016-09-01 10:53:01 |
|  2 | 美国    |        |           |           | 23.251.63.45    | 2016-09-01 10:53:01 |
|  3 | 美国    |        |           |           | 23.251.63.45    | 2016-09-01 10:53:01 |
|  4 | 中国    | 华南   | 广东省    | 广州市    | 119.130.71.153  | 2016-09-01 10:53:01 |
|  5 | 美国    |        |           |           | 66.249.65.183   | 2016-09-01 10:53:01 |
|  6 | 美国    |        |           |           | 66.249.65.180   | 2016-09-01 10:53:01 |
|  7 | 美国    |        |           |           | 66.249.65.142   | 2016-09-01 10:53:01 |
|  8 | 美国    |        |           |           | 107.151.226.203 | 2016-09-01 10:53:01 |
|  9 | 美国    |        |           |           | 107.151.226.203 | 2016-09-01 10:53:01 |
| 10 | 美国    |        |           |           | 66.249.65.134   | 2016-09-01 10:53:01 |
+----+---------+--------+-----------+-----------+-----------------+---------------------+
10 rows in set (0.00 sec)

mysql>






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-266605-1-1.html 上篇帖子: Python表格讲解及安装 下篇帖子: Python_正则表达式 python
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表