python3怎么实现简单的ip提取功能

发布时间:2021-09-04 11:56 来源:亿速云 阅读:0 作者:chen 栏目: 网络安全

这篇文章主要讲解了“python3怎么实现简单的ip提取功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python3怎么实现简单的ip提取功能”吧!

准备环境python3,win10系统,当然linux更好,win下需要安装reuqests模块(调用第三方接口进行ip归属地查询需要发起请求)

\Users\\Desktop>pip install requests
Collecting requests
  Downloading requests-.-py2.py3-none-any.whl (kB)
%  kB kB/s
Collecting chardet<.,>=. (from requests)
  Downloading chardet-.-py2.py3-none-any.whl (kB)
%  kB kB/s
Collecting idna<,>= (from requests)
  Downloading idna--py2.py3-none-any.whl (kB)
%  kB MB/s
Collecting urllib3<,>=. (from requests)
  Downloading urllib3--py2.py3-none-any.whl (kB)
%  kB kB/s
Collecting certifi>=. (from requests)
  Downloading certifi-.-py2.py3-none-any.whl (kB)
%  kB MB/s
Installing collected  chardet, idna, urllib3, certifi, requests
Successfully installed certifi-. chardet-. idna- requests-. urllib3-

我这里调用阿里的第三方接口进行IP归属地查询,接口地址http://ip.taobao.com/instructions.php

接口描述
1. 请求接口(GET):
/service/getIpInfo.php?ip=[ip地址字串]
2. 响应信息:
(json格式的)国家 、省(自治区或直辖市)、市(县)、运营商
3. 返回数据格式:
{:0,:{:,:,:,
:,:,:,:,
:,:,:,:,
:,:}}
其中code的值的含义为,0:成功,1:失败。

这里大概介绍一下思路,读取文件,定义函数,进行循环,发起请求,接收参数,判断,筛选并写入文件,完成。

运行python文件先写头文件格式,告诉系统运行python3的代码,并且以utf-8编码

#!usr/bin/python3
#-*-coding:utf-8-*-
 requests
 requests


 requests

    URL =  + ip
    r = requests.get(,timeout=) 
    print() 
ip = 
checkip(ip)

运行代码结果如下,初步判断代码应该没问题

C:\Users\92039\Desktop>python 2.py
test

 requests

    URL =  + ip
    r = requests.get(,timeout=)
    print() 
ip = 
checkip(ip)
 requests

    URL =  + ip
    r = requests.get(,timeout=)
    json_data = r.json() 
    region = json_data[][] 
    print()  
ip = 
checkip(ip)

region = json_data[u'data'][u'region']

此处代码是按照接口返回的json的格式来写的

 requests

    URL =  + ip
    r = requests.get(,timeout=)
    json_data = r.json()
    region = json_data[][]
    print(region)  
ip = 
checkip(ip)

C:\Users\92039\Desktop>python 2.py
山西省

测试成功

即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。大多数的异常都不会被程序处理,而是以错误形式展现

这时候就要进行异常处理

引入try/except

:
        x = /
 ZeroDivisionError  err:
        print(, err)
yichang()
   

C:\Users\92039\Desktop>python 5.py
异常: division by zero

如果未做异常处理将直接报错,导致程序无法继续执行部

 requests

:
        URL =  + ip
        r = requests.get(URL,timeout=)
        json_data = r.json()
        region = json_data[][]
        print(region)
:

ip = 
checkip(ip)

C:\Users\92039\Desktop>python 2.py

山西省

接下来加入if判断

 requests

:
        URL =  + ip
        r = requests.get(URL,timeout=)
        json_data = r.json()
        region = json_data[][]
 region == :

:

:

ip = 
checkip(ip)

然后需要加入打开文件部分的代码

当做文件处理时,需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。

file = open()
data = file.read()
file.close()
   

这里有两个问题。一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理

然而with可以很好的处理上下文环境产生的异常

= f.read()


 open()  f:       
    ips = f.read().split()   
 ip  ips:               
        print(ip)

ips.txt中写入了3个ip

222.31.41.253 #山西省
202.12.15.52  #日本
61.135.169.12 #北京


运行结果

C:\Users\92039\Desktop>python 3.py

222.31.41.253
202.12.15.52
61.135.169.121

将该模块加入到代码中

 requests

:
        URL =  + ip
        r = requests.get(URL,timeout=)
        json_data = r.json()
        region = json_data[][]
 region == :
            print(ip)
:

:

 open()  f:
    ips = f.read().split()
 ip  ips:
        print(ip)
        checkip(ip)

C:\Users\92039\Desktop>python 2.py
222.31.41.253  
222.31.41.253  
202.12.15.52
61.135.169.121

因为有两次输出,属于山西省的ip会打印两次,由运行结果可知只有第一个ip属于山西省

接下来要加入写入文件的模块,将属于山西省的ip全部写入一个文件

 open(,)  fw:   
 i  range():
        fw.write()
原有数据
1
2
3
4

运行脚本后

1
2
3
4
a
a
a
a
a

补充一下文件操作的知识
文件打开模式    
  • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】

  • w,只写模式【不可读;不存在则创建;存在则清空内容】

  • x, 只写模式【不可读;不存在则创建,存在则报错】

  • a, 追加模式【可读;   不存在则创建;存在则只追加内容】,文件指针自动移到文件尾。

"+" 表示可以同时读写某个文件    
  • r+, 读写【可读,可写】

  • w+,写读【可读,可写】,消除文件内容,然后以读写方式打开文件。

  • x+ ,写读【可读,可写】

  • a+, 写读【可读,可写】,以读写方式打开文件,并把文件指针移到文件尾。

"b"表示以字节的方式操作,以二进制模式打开文件,而不是以文本模式。    
  • rb  或 r+b

  • wb 或 w+b

  • xb 或 w+b

  • ab 或 a+b

    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

将写入文件的2行代码加入

 requests

:
        URL =  + ip
        r = requests.get(URL,timeout=)
        json_data = r.json()
        region = json_data[][]
 region == :
 open(,)  fw:
                fw.write( + ip)
:

:

 open()  f:       
    ips = f.read().split()
 ip  ips:
        checkip(ip)

运行脚本

:\\92039\> 2

会在桌面创建一个a.txt文档,结果为

222.31.41.253

免责声明:本站发布的内容(图片、视频和文字)以原创、来自互联网转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系QQ:712375056 进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。