天天看点

分析nginx ip地址来源

接上一篇的日志格式,我们已经筛选出了所有的IP地址、做法稍有不同。nginx正则把IP写进文件里、还是那句话数据太大我们不能写进列表里边:

1

2

3

4

5

6

7

8

9

10

11

12

<code>def</code> <code>getIP():</code>

<code>    </code><code>f </code><code>=</code> <code>open</code><code>(log,</code><code>'r'</code><code>) </code>

<code>    </code><code>IPdic</code><code>=</code><code>{}</code>

<code>    </code><code>for</code> <code>logline </code><code>in</code> <code>f.readlines():</code>

<code>        </code><code>matchs </code><code>=</code> <code>p.match(logline)</code>

<code>        </code><code>if</code> <code>matchs !</code><code>=</code><code>None</code><code>:</code>

<code>            </code><code>allGroups </code><code>=</code><code>matchs.groups()</code>

<code>            </code><code>IP</code><code>=</code><code>allGroups[</code><code>0</code><code>] </code>

<code>            </code><code>f1 </code><code>=</code> <code>open</code><code>(</code><code>'/tmp/ip.txt'</code><code>,</code><code>'a'</code><code>)</code>

<code>            </code><code>f1.write(</code><code>"%s\n"</code><code>%</code><code>(IP))</code>

<code>            </code><code>f1.close()</code>

<code>    </code><code>f.close()</code>

2、调用IP模块进行,操作。可以用Pip安装。模块介绍:https://github.com/lxyu/17monip:

3、模块使用。

13

14

15

16

17

<code>[root@monitor python]</code><code># cat  query.py </code>

<code>#!/usr/bin/env python</code>

<code>#-*- coding: utf-8 -*-</code>

<code>import</code> <code>IP</code>

<code>def</code> <code>CheckIP():</code>

<code>    </code><code>outip </code><code>=</code> <code>open</code><code>(</code><code>'/tmp/ip.txt'</code><code>,</code><code>'r'</code><code>)</code>

<code>    </code><code>output </code><code>=</code> <code>open</code><code>(</code><code>'/tmp/output.txt'</code><code>,</code><code>'w'</code><code>)</code>

<code>    </code><code>for</code> <code>line </code><code>in</code> <code>outip:</code>

<code>        </code><code>listIP</code><code>=</code><code>line.strip(</code><code>'\n'</code><code>)</code>

<code>        </code><code>local </code><code>=</code> <code>IP.find(listIP).strip(</code><code>" "</code><code>)</code>

<code>        </code><code>if</code> <code>local !</code><code>=</code> <code>"" :</code>

<code>            </code><code>output.write(local.encode(</code><code>'utf-8'</code><code>))</code>

<code>            </code><code>output.write(</code><code>'\n'</code><code>)</code>

<code>    </code><code>output.close()</code>

<code>    </code><code>outip.close()</code>

<code>if</code> <code>__name__</code><code>=</code><code>=</code><code>"__main__"</code><code>:</code>

<code>    </code><code>CheckIP()</code>

4、在生成文件,用中文写入字典,标记出来,有个地方需要注意的是,当我们字典使用中文的适合,要用json的方式导出数据:

<code>[root@monitor python]</code><code># cat queryadd.py </code>

<code>#coding=utf-8 </code>

<code>import</code> <code>json </code>

<code>def</code> <code>GetAddress():</code>

<code>    </code><code>pvdic</code><code>=</code><code>{}</code>

<code>    </code><code>f </code><code>=</code> <code>open</code><code>(</code><code>'/tmp/output.txt'</code><code>,</code><code>'r'</code><code>)</code>

<code>    </code><code>n </code><code>=</code> <code>0</code>

<code>    </code><code>for</code> <code>line </code><code>in</code> <code>f:</code>

<code>        </code><code>add </code><code>=</code> <code>line.split()</code>

<code>        </code><code>address</code><code>=</code><code>add[</code><code>1</code><code>]</code>

<code>        </code><code>pvdic[address]</code><code>=</code><code>pvdic.get(address,</code><code>0</code><code>) </code><code>+</code><code>1</code>

<code>    </code><code>pvdic</code><code>=</code><code>sorted</code><code>(pvdic.iteritems(),key</code><code>=</code><code>lambda</code> <code>c:c[</code><code>1</code><code>],reverse</code><code>=</code><code>True</code><code>)</code>

<code>    </code><code>return</code>  <code>json.dumps(pvdic,encoding</code><code>=</code><code>"utf-8"</code><code>,ensure_ascii</code><code>=</code><code>False</code><code>)</code>

<code>if</code> <code>__name__</code><code>=</code><code>=</code><code>'__main__'</code><code>:</code>

<code>    </code><code>print</code> <code>GetAddress()</code>

5、生成效果:

<code>[root@monitor python]</code><code># python queryadd.py </code>

<code>[[</code><code>"广东"</code><code>, </code><code>86</code><code>], [</code><code>"河北"</code><code>, </code><code>81</code><code>], [</code><code>"河南"</code><code>, </code><code>78</code><code>], [</code><code>"山东"</code><code>, </code><code>43</code><code>], [</code><code>"浙江"</code><code>, </code><code>43</code><code>], [</code><code>"福建"</code><code>, </code><code>31</code><code>], [</code><code>"北京"</code><code>, </code><code>30</code><code>], [</code><code>"江苏"</code><code>, </code><code>26</code><code>], [</code><code>"广西"</code><code>, </code><code>26</code><code>], [</code><code>"湖南"</code><code>, </code><code>23</code><code>], [</code><code>"四川"</code><code>, </code><code>21</code><code>], [</code><code>"上海"</code><code>, </code><code>20</code><code>], [</code><code>"天津"</code><code>, </code><code>16</code><code>], [</code><code>"安徽"</code><code>, </code><code>14</code><code>], [</code><code>"黑龙江"</code><code>, </code><code>13</code><code>], [</code><code>"陕西"</code><code>, </code><code>11</code><code>], [</code><code>"湖北"</code><code>, </code><code>8</code><code>], [</code><code>"江西"</code><code>, </code><code>5</code><code>], [</code><code>"云南"</code><code>, </code><code>3</code><code>], [</code><code>"吉林"</code><code>, </code><code>3</code><code>], [</code><code>"山西"</code><code>, </code><code>3</code><code>], [</code><code>"贵州"</code><code>, </code><code>2</code><code>], [</code><code>"辽宁"</code><code>, </code><code>2</code><code>], [</code><code>"甘肃"</code><code>, </code><code>1</code><code>], [</code><code>"内蒙古"</code><code>, </code><code>1</code><code>], [</code><code>"重庆"</code><code>, </code><code>1</code><code>], [</code><code>"香港"</code><code>, </code><code>1</code><code>]]</code>

<code></code>

本文转自 小罗ge11 51CTO博客,原文链接:http://blog.51cto.com/xiaoluoge/1653123,如需转载请自行联系原作者

继续阅读