IP地址是互联网中唯一标识一个设备的地址,有时候需要判断一个IP地址所属的地区,这就需要用到IP地址归属查询。本文将介绍Python如何通过IP地址查询所属地区并展示代码。

一、 IP地址归属查询

IP地址归属查询又称IP地址归属地查询、IP地址归属地定位、IP地址查询、IP地址定位等,是通过查询互联网上公共的IP数据库,来得到一个IP地址所属的地理位置、运营商等信息。

二、 IP地址的分类

IP地址分为IPv4和IPv6两种,IPv4是32位地址,IPv6是128位地址。通常我们使用的是IPv4地址, 其中一个IPv4地址由4个数字组成,每个数字之间用点号“.”隔开,每个数字的取值范围为0~255。例如: 192.168.1.1。

三、 IP地址转二进制

IP地址在计算机中以二进制表示,需要将IP地址转为二进制数,这就需要用到位运算符。在Python中,使用bin()函数将十进制数转为二进制数。例如:

ip = "192.168.1.1"
binary_ip = ".".join([bin(int(x)+256)[3:] for x in ip.split(".")])
print(binary_ip)

输出结果为:11000000.10101000.00000001.00000001

四、 IP地址归属地查询库

在Python中,有多个第三方库可以使用,例如pygeoip、maxminddb等。在本文中,我们将使用淘宝IP地址库,淘宝IP地址库是淘宝开放平台提供的免费IP地址库,包括IPv4和IPv6地址库。我们只需通过HTTP请求即可获取到所需的IP地址信息。

五、 Python代码实现

接下来,我们将通过Python代码来实现IP地址归属地查询。代码分为两部分:第一部分是将IP地址转换为二进制位,第二部分是通过HTTP请求查询IP地址归属地。

首先,我们需要导入所需的库:

import requests

然后,实现将IP地址转为二进制:

def get_binary_ip(ip):
    """
    将IP地址转为二进制
    :param ip: IP地址,例如:"192.168.1.1"
    :return: IP地址的二进制表示,例如:"11000000.10101000.00000001.00000001"
    """
    binary_ip = ".".join([bin(int(x) + 256)[3:] for x in ip.split(".")])
    return binary_ip

接下来,实现通过HTTP请求查询IP地址归属地:

def get_location_by_ip(ip):
    """
    通过HTTP请求查询IP地址归属地
    :param ip: IP地址,例如:"192.168.1.1"
    :return: IP地址的归属地,例如:"广东省深圳市"
    """
    url = "http://ip.taobao.com/service/getIpInfo.php?ip=" + ip
    try:
        response = requests.get(url, timeout=5)
        data = response.json()
        if data["code"] == 0:
            location = data["data"]["region"] + data["data"]["city"]
        else:
            location = "未知"
    except Exception as e:
        print(e)
        location = "未知"
    return location

最后,我们将两个函数结合起来,实现完整功能:

import requests

def get_binary_ip(ip):
    """
    将IP地址转为二进制
    :param ip: IP地址,例如:"192.168.1.1"
    :return: IP地址的二进制表示,例如:"11000000.10101000.00000001.00000001"
    """
    binary_ip = ".".join([bin(int(x) + 256)[3:] for x in ip.split(".")])
    return binary_ip

def get_location_by_ip(ip):
    """
    通过HTTP请求查询IP地址归属地
    :param ip: IP地址,例如:"192.168.1.1"
    :return: IP地址的归属地,例如:"广东省深圳市"
    """
    url = "http://ip.taobao.com/service/getIpInfo.php?ip=" + ip
    try:
        response = requests.get(url, timeout=5)
        data = response.json()
        if data["code"] == 0:
            location = data["data"]["region"] + data["data"]["city"]
        else:
            location = "未知"
    except Exception as e:
        print(e)
        location = "未知"
    return location

if __name__ == "__main__":
    ip = "192.168.1.1"
    binary_ip = get_binary_ip(ip)
    location = get_location_by_ip(ip)
    print("IP地址:{}的归属地是:{}".format(ip, location))

六、 总结

本文介绍了Python如何通过IP地址查询所属地区并展示了代码实现。通过学习本文,你可以掌握将IP地址转为二进制数和通过HTTP请求查询IP地址归属地的方法。

python判断ip所属地区 python 判断ip 网段的更多相关文章

  1. PHP获取IP及地区信息(纯真IP数据库)

    昨天在写程序的时候,发现在用户的时候记录IP和地区信息也许以后用得上,去网上找了找,发现实现的方式有好多好多,因为我用的ThinkPHP,后来又去TP官网找了找,最后采用了下面这种方法. <?p ...

  2. python代理池的构建1——代理IP类的构建,以及配置文件、日志文件、requests请求头

    一.整体结构 二.代理IP类的构建(domain.py文件) ''' 实现_ init_ 方法, 负责初始化,包含如下字段: ip: 代理的IP地址 port:代理IP的端口号 protocol: 代 ...

  3. python实现判断一个字符串是否是合法IP地址

    #!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:判断一个字符串是否是合法IP地址 ''' import re def jud ...

  4. python实现ip地址的包含关系判断

    python的IPy模块虽然可以实现一些ip地址的判断,但是不是很完美,有些场景根本判断不出来,还会抛出异常,比如一个地址范围和一个ip/掩码,这种不同类型就无法判断. 对此通过自己写函数来实现ip地 ...

  5. python --- 19 判断对象所属,区分函数和对象, 反射

    一.判断对象所属 isinstance, type , issubclass 1.issubclass(x,y)    判断x是否是y 的子类 2.type(x)  精准返回x 的数据类型 3.isi ...

  6. python扫描proxy并获取可用代理ip列表

    mac或linux下可以work的代码如下: # coding=utf-8 import requests import re from bs4 import BeautifulSoup as bs ...

  7. Python基础(三):简化除法判断、分析apache访问日志、扫描存活主机、利用多线程实现ssh并发访问

    一.简化除法判断 目标: 编写mydiv.py脚本,主要要求如下: 提示用户输入一个数字作为除数 如果用户按下Ctrl+C或Ctrl+D则退出程序 如果用户输入非数字字符,提示用户应该输入数字 如果用 ...

  8. python代理池的构建2——代理ip是否可用的处理和检查

    上一篇博客地址:python代理池的构建1--代理IP类的构建,以及配置文件.日志文件.requests请求头 一.代理ip是否可用的处理(httpbin_validator.py) #-*-codi ...

  9. ip校验方法:判断ip是否位于指定的范围内

    import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.reg ...

  10. python扫描proxy并获取可用代理ip

    今天咱写一个挺实用的工具,就是扫描并获取可用的proxy 首先呢,我先百度找了一个网站:http://www.xicidaili.com 作为例子 这个网站里公布了许多的国内外可用的代理的ip和端口 ...

随机推荐

  1. 【VS Code 与 Qt6】运用事件过滤器批量操作子级组件

    如果某个派生自 QObject 的类重写 eventFilter 方法,那它就成了事件过滤器(Event Filter).该方法的声明如下: virtual bool eventFilter(QObj ...

  2. JVM源码分析:深入剖析java.c文件中JavaMain方法中InitializeJVM的实现

    经过前文<从JDK源码级深入剖析main方法的运行机制>的分析,我们知道了实现JavaMain方法的四个主要步骤: 初始化Java虚拟机 加载主运行类 通过加载的主运行类,获取main方法 ...

  3. React SSG - 也写个 Demo 吧

    上次写了一个 SSR 的 DEMO,今天写个小 Demo 来从头实现一下 react 的 SSG,来理解下 SSG 是如何实现的. 什么是 SSG SSG 即 Static Site Generati ...

  4. 【Azure 媒体服务】Azure Media Player 在Edge浏览器中不能播放视频问题的分析与解决

    问题描述 使用Azure Media Service 制作视频点播服务,在客户端使用 Azure Media Player 播放器在 Edge 浏览器中播放视频时候遇见无法播放的问题: 错误信息: T ...

  5. vue-router之hash与history,以及nginx配置

    本篇讲解前端项目的路由模式(以vue-router为例),以及history模式下的项目部署问题. vue-router的路由模式可以通过指定mode属性值控制,可选值:"hash" ...

  6. JAVA生成xml文件格式

    摘要: 1.在某些业务中需要使用JAVA按照规定生成固定XML格式文件,本文中根据相应的业务生成固定的XML格式文件,并且通过测试可以发送. 2.下面代码根绝dom4j生成xml格式文件 代码思路: ...

  7. SQL专家云回溯某时间段内的阻塞

    背景 SQL专家云像"摄像头"一样,对环境.参数配置.服务器性能指标.活动会话.慢语句.磁盘空间.数据库文件.索引.作业.日志等几十个运行指标进行不同频率的实时采集,保存到SQL专 ...

  8. influxdb常用sql总结

    本文为博主原创,转载请注明出处: 1.登录influxdb influx -username admin -password "password" 2.查看数据库 ##查看有哪些数 ...

  9. 加速体细胞突变检测分析流程-系列2(ctDNA等高深度样本)

    Sentieon●体细胞变异检测系列-2 Sentieon 致力于解决生物信息数据分析中的速度与准确度瓶颈,通过算法的深度优化和企业级的软件工程,大幅度提升NGS数据处理的效率.准确度和可靠性. 针对 ...

  10. CAN转PROFINET协议网关 JM-PN-CAN

        1 产品功能 捷米特JM-PN-CAN 是自主研发的一款 PROFINET 从站功能的通讯网关.主要功能是将各种 CAN 设备接入到 PROFINET 网络中. 捷米特JM-PN-CAN连接到 ...