首页 > 编程语言 >python脚本获取当前浏览器客户端的公共ip以及其详细信息

python脚本获取当前浏览器客户端的公共ip以及其详细信息

时间:2024-04-30 10:11:07浏览次数:21  
标签:get python ip current location import timezone 客户端

python脚本获取当前客户端的公共ip以及其详细信息

import requests
from flask import Flask, request, make_response, send_from_directory
from datetime import datetime
import asyncio
from hypercorn.asyncio import serve
from hypercorn.config import Config
import os
import pytz

app = Flask(__name__)

def get_current_time_in_timezone(timezone):
    tz = pytz.timezone(timezone)
    current_time = datetime.now(tz)
    return current_time.strftime('%Y-%m-%d %H:%M:%S %Z')

@app.route('/')
def get_ip_location():
    ip_address = request.headers.get('X-Real-IP')
    if not ip_address:
        ip_address = request.headers.get('X-Forwarded-For', '').split(',')[0]
        if not ip_address:
            return "无法获取IP地址", 400

    try:
        # 获取IP地址的地理位置
        response = requests.get(f"http://ipinfo.io/{ip_address}/json")
        data = response.json()
        city = data.get('city', '未知')
        country = data.get('country', '未知')
        location = f"<b>Your IP Address: </b> {ip_address}<br> <br><b>Country: </b> {country}<br><br><b>City: </b> {city}<br><br>"

        # 获取经纬度
        loc = data.get('loc', '')
        if loc:
            latitude, longitude = loc.split(',')
            location += f"<b>LongLat: </b>Longitude: {longitude}, Latitude: {latitude}<br><br>"

        # 获取时区和当前时间
        timezone = data.get('timezone', '')
        current_time = get_current_time_in_timezone(timezone)
        location += f"<b>Timezone: </b> {timezone}<br><br><b>IP' current time: </b> {current_time}<br><br>"

        # 获取客户端的user-agent信息
        user_agent = request.headers.get('User-Agent', '未知')
        location += f"<b>User-Agent:</b> {user_agent}"

        # 限制页面内容在300字节以内
        location = location.encode('utf-8')
        response = make_response(location)
        response.headers['Content-Length'] = len(location)
        
        return response
    except Exception as e:
        return str(e), 500

@app.route('/favicon.ico')
def favicon():
    return send_from_directory(os.path.join(app.root_path), 'favicon.ico', mimetype='image/vnd.microsoft.icon')

if __name__ == '__main__':
    config = Config()
    config.bind = ["0.0.0.0:5000"]
    config.http_timeout = 20
    
    asyncio.run(serve(app, config))

* 其中涉及到的包模块,本地没有的,需要自己区pip install一下,这个脚本需要python3去启动

输出信息如下:

Your IP Address: 

Country: 

City: 

LongLat: 

Timezone: 

IP' current time: 

User-Agent:

 

标签:get,python,ip,current,location,import,timezone,客户端
From: https://www.cnblogs.com/hkgan/p/18167237

相关文章

  • Python重试任务模块tenacity
    1.简介在实际应用中,经常会碰到在web请求时,因为网络的不稳定,会有请求超时的问题,这时候,一般都是自己去实现重试请求的逻辑,直到得到响应或者超时。虽然这样的逻辑并不复杂,但是代码写起来却不那么优雅,不那么pythonic。tenacity是一个重试库,使用python语言编写,它能够让我们在任务的重......
  • Python-重试任务模块tenacity
     1.软硬件环境windows1164bits python3.6tenacity2.简介在实际应用中,经常会碰到在web请求时,因为网络的不稳定,会有请求超时的问题,这时候,一般都是自己去实现重试请求的逻辑,直到得到响应或者超时。虽然这样的逻辑并不复杂,但是代码写起来却不那么优雅,不那么pythonic。tenaci......
  • 社会网络分析及其Python实现
    社会网络分析(SocialNetworkAnalysis,SNA)在人类学、心理学、社会学、数学以及统计学等领域中发展起来,是综合运用图论、数学模型来研究社会行动者之间的关系或通过这些关系流动的各种有形或无形的东西,如信息、资源等,近年来逐渐成为一种热门的社会科学研究方法。社会网络分析旨在......
  • Linux基础——主机域名解析默认使用IPV6路由
    一、问题描述主机访问内网存储网段,发现域名默认解析的IPV6地址。ping访问ipv4地址正常通讯。主机本地解析/etc/resolv.conf的DNS配置正常。#ping域名默认解析IPV6地址Pingnasgroup.xxxx.xxxx.com#pingipv4地址正常ping-4nasgroup.xxxx.xxxx.com#查看本地DNS配......
  • python3解析FreeSWITCH会议室列表信息
    操作系统:CentOS7.6_x64FreeSWITCH版本:1.10.9 Python版本:3.9.12进行FreeSWITCH会议室相关功能开发过程中,会遇到需要解析会议室列表信息并进行特定操作的情况,比如设置特定通道变量、发送dtmf、录音等。今天整理下CentOS7环境下,使用Python3解析FreeSWITCH会议室列表信息然后......
  • HydroOJ 从入门到入土(17)批量转化其他格式题库(Python)
    新题库,新快乐,新痛苦。一、想法有了多种题库之后,常常会遇到大量题库无法转化到自己的OJ上。每次都要重新手写解析器,非常浪费时间,于是抽出了这个工具。本工具可以将抽取好的信息自动组装成符合HydroOJ格式的题目并自动压缩,解决后半部分的转化工作。二、实现1.准备包和相......
  • Python 学习笔记
    1、Python简介设计哲学:强调代码的可读性和简洁的语法(尤其是用空格缩进来定义代码块,而不是使用大括号或关键词)。应用领域:Web开发、数据科学、人工智能、科学计算、自动化脚本等。参考文档:Python简介2.基本语法解释器:Python代码可以通过Python解释器直接运行,也可以作为脚本......
  • 【Python】Q-Learning处理CartPole-v1
    上一篇配置成功gym环境后,就可以利用该环境做强化学习仿真了。这里首先用之前学习过的qlearning来处理CartPole-v1模型。CartPole-v1是一个倒立摆模型,目标是通过左右移动滑块保证倒立杆能够尽可能长时间倒立,最长步骤为500步。模型控制量是左0、右1两个。模型状态量为下面四个:......
  • 深入理解Python多进程:从基础到实战
    title:深入理解Python多进程:从基础到实战date:2024/4/2920:49:41updated:2024/4/2920:49:41categories:后端开发tags:并发编程多进程管理错误处理资源调度性能优化异步编程Python并发库引言在Python编程中,多进程是一种重要的并发编程方式,可以让我们充分......
  • Python 编程
    第1章什么是Python?#Python——编程新手最好的选择第2章为Python做好准备#单行注释打印出单词"HelloWorld"print("HelloWorld")'''多行注释这是一条注释这也是一条注释'''print("HelloPython")第3章变量和操作符的世界3.......