首页 > 编程语言 >python判断ip所属地区 python 判断ip 网段

python判断ip所属地区 python 判断ip 网段

时间:2023-08-22 14:32:15浏览次数:119  
标签:网段 python ip 归属 查询 location IP地址 data

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,归属,查询,location,IP地址,data
From: https://blog.51cto.com/u_16022798/7189754

相关文章

  • javascript学习笔记第五天
    今天的笔记functiongetusergradesum(arr=[])传递数组进入匿名函数,假设不确定数组是否会为空可以默认传一个空的数组进入,这样不会报错在匿名方法里面,return之后就直接结束函数了三元运算符好像不能同时使用两个return,例如i>l?returni:retuenl,这样子会报错return时......
  • CAN通讯-使用Python收发CAN数据保姆级教程(包含完整代码)
    CAN通讯-使用Python收发CAN数据配置环境1.环境配置1.1安装CAN通讯需要的包1.2安装kvaser_drivers以及KvaserCanKing2.使用Python收发数据2.1接发数据代码如下:2.1.1接收数据代码2.1.2发送数据代码2.2验证发送数据2.2.1使用KvaserCanKing接收数据2.2.2......
  • 最完美WIN11_Pro_23H2.22631.2199软件选装纯净版VIP51.9
    【系统简介】=============================================================1.本次更新母盘来自UUP_WIN11_Pro_23H2.22631.2199。进一步精简优化调整。2.只为呈现最好的作品,手工精简优化部分较多。3.OS版本号为22631.2199。个别要求高的就下MSDN吧,里面啥功能都有。4.集成《DrvCeo......
  • Python的wizard入门
    Wizard可以快速构建应用程序的图形化界面,下图是Wizard的工作区域介绍。第一步:打开AidLearning中的Wizard工具。单击第一个Layout_H容器,选中容器,在右侧属性窗口中将容器高度css_height调整为300px,容器宽度css_width也调整为300px。容器的默认名称为hbox0。第二步:给容器hbox0添......
  • 用友BIP重磅升级,引领企业数智化迈入AI普及应用时代
    8月19日,由用友主办的“2023全球商业创新大会”在上海隆重召开。本次大会以“数据驱动、智能运营”为主题,汇聚众多行业领先企业及各界商业精英,深入探讨解决企业数智化面临的全面数据服务、AI普及应用、升级数智底座、主题化融合应用创新、价值化国产替代及中企出海等诸多课题。会上,......
  • python系列教程213
    声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值......
  • python @property装饰器实现原理
    @property装饰器可以使一个对象的方法变成属性访问,比较方便,那么它是如何实现的呢?下面是一个自己动手实现的例子:classMyProperty:def__init__(self,fget=None,fset=None):self.fget=fgetself.fset=fsetdef__get__(self,instance,o......
  • eclipse 合并错分支代码还原,合并到本分支但未push到库上
    由于本地分支较多,稍不留神就合并错误,发现合并错误,但未提交push到git库上,此时想要还原。如图  那么需要还原,之前处理方式,删除本地代码,重新从版本库下载。 gitreset0e7d080 --hard......
  • 13 JavaScript关于prototype(超重点)
    13JavaScript关于prototype(超重点)prototype是js里面给类增加功能扩展的一种模式.写个面向对象来看看.functionPeople(name,age){this.name=name;this.age=age;this.run=function(){console.log(this.name+"在跑")}}p1=newPeople("......
  • ios开发之--使用xib适配iPhone X
    最近在修改一个老项目,里面有很多xib文件,需要适配iPhoneX,但是又不想重写页面用代码适配,分享个小方法,也算是个笨办法吧,适配iPhoneX底部,iPhoneX底部有34px的操作区域,而其他机型的则是没有的,具体步骤如下:1、2、3、双击上图箭头所指,进入如下界面:  然后,就可以了!上面导航适配,目前我还......