Python 提取图片中的GPS信息

简介: JPG图片中默认存在敏感数据,例如位置,相机类型等,可以使用Python脚本提取出来,加以利用,自己手动拍摄一张照片,然后就能解析出这些敏感数据了,对于渗透测试信息搜索有一定帮助,但有些相机默认会抹除这些参数。

JPG图片中默认存在敏感数据,例如位置,相机类型等,可以使用Python脚本提取出来,加以利用,自己手动拍摄一张照片,然后就能解析出这些敏感数据了,对于渗透测试信息搜索有一定帮助,但有些相机默认会抹除这些参数。

提取图片EXIF参数: 通过提取指定图片的EXIF参数结合GPS数据定位到当时拍摄图片的物理位置.

import os,sys,json
import exifread
import urllib.request

#调用百度地图API通过经纬度获取位置
def getlocation(lat,lon):   
    url = "http://api.map.baidu.com/reverse_geocoding/v3/?ak=GPqF0q0uFT4zOmVKmPU7 \
    gu3SmB9z3jFV&output=json&coordtype=wgs84ll&location="+lat+","+lon
    req = urllib.request.urlopen(url)
    res = req.read().decode("utf-8")
    string = json.loads(res)
    jsonResult = string.get("result")
    formatted_address = jsonResult.get("formatted_address")
    print("目标所在城市: {}".format(formatted_address))

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("[-] 请传递一个图片地址")
    else:
        ImageName = str(sys.argv[1])
        with open(ImageName,'rb') as f:
            tags = exifread.process_file(f)
            print("设备品牌: {}".format(tags['Image Make']))
            print("具体型号: {}".format(tags['Image Model']))
            print('照片尺寸: {} x {}'.format(tags['EXIF ExifImageWidth'], tags['EXIF ExifImageLength']))
            print("创建日期: {}".format(tags['Image DateTime']))
            print("拍摄时间: {}".format(tags["EXIF DateTimeOriginal"].printable))
            print("GPS处理方法: {}".format(tags['GPS GPSProcessingMethod']))
            print("GPSTimeStamp: {}".format(tags['GPS GPSTimeStamp']))
            print("拍摄软件版本: {}".format(tags['Image Software']))
            #纬度
            LatRef=tags["GPS GPSLatitudeRef"].printable
            Lat=tags["GPS GPSLatitude"].printable[1:-1].replace(" ","").replace("/",",").split(",")
            Lat=float(Lat[0])+float(Lat[1])/60+float(Lat[2])/float(Lat[3])/3600
            if LatRef != "N":
                Lat=Lat*(-1)
            #经度
            LonRef=tags["GPS GPSLongitudeRef"].printable
            Lon=tags["GPS GPSLongitude"].printable[1:-1].replace(" ","").replace("/",",").split(",")
            Lon=float(Lon[0])+float(Lon[1])/60+float(Lon[2])/float(Lon[3])/3600
            if LonRef!="E":
                Lon=Lon*(-1)
            f.close()
            print("目标所在经纬度: {},{}".format(Lat,Lon))
            getlocation(str(Lat),str(Lon))

将图片转为字符图片: 通过pillow图片处理库,对图片进行扫描,然后用特殊字符替换图片的每一个位,生成的字符图片.

from PIL import Image
import argparse

# 将256灰度平均映射到70个字符上
def get_char(r,g,b,alpha = 256):
    ascii_char = list("~!@#$%^&*()_+ ")
    if alpha == 0:
        return " "
    length = len(ascii_char)
    gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
    unit = (256.0 + 1)/length
    return ascii_char[int(gray/unit)]

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--file",dest="file",help="指定一个图片文件")
    parser.add_argument("--width",dest="width",type=int,default=50,help="指定图片宽度")
    parser.add_argument("--height",dest="height",type=int,default=25,help="指定图片高度")
    args = parser.parse_args()
    # 使用方式: pip install pillow | main.py --file=xxx.jpg
    if args.file != None:
        img = Image.open(args.file)
        img = img.resize((args.width,args.height), Image.NEAREST)
        txt = ""
        for row in range(args.height):
            for cow in range(args.width):
                txt += get_char(*img.getpixel((cow,row)))
            txt += "\n"
        print(txt)
    else:
        parser.print_help()
相关文章
|
25天前
|
Python
Python实用记录(六):如何打开txt文档并删除指定绝对路径下图片
这篇文章介绍了如何使用Python打开txt文档,删除文档中指定路径的图片,并提供了一段示例代码来展示这一过程。
26 1
|
25天前
|
计算机视觉 Python
Python实用记录(一):如何将不同类型视频按关键帧提取并保存图片,实现图片裁剪功能
这篇文章介绍了如何使用Python和OpenCV库从不同格式的视频文件中按关键帧提取图片,并展示了图片裁剪的方法。
54 0
|
25天前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
98 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
5天前
|
存储 数据采集 数据库
用 Python 爬取淘宝商品价格信息时需要注意什么?
使用 Python 爬取淘宝商品价格信息时,需注意法律和道德规范,遵守法律法规和平台规定,避免非法用途。技术上,可选择 Selenium 和 Requests 库,处理反爬措施如 IP 限制、验证码识别和请求频率控制。解析页面数据时,确定数据位置并清洗格式。数据存储可选择 CSV、Excel、JSON 或数据库,定期更新并去重。还需进行错误处理和日志记录,确保爬虫稳定运行。
|
5天前
|
数据采集 Web App开发 iOS开发
如何利用 Python 的爬虫技术获取淘宝天猫商品的价格信息?
本文介绍了使用 Python 爬虫技术获取淘宝天猫商品价格信息的两种方法。方法一使用 Selenium 模拟浏览器操作,通过定位页面元素获取价格;方法二使用 Requests 和正则表达式直接请求页面内容并提取价格。每种方法都有详细步骤和代码示例,但需注意反爬措施和法律法规。
|
25天前
|
Python
Python实用记录(四):os模块-去后缀或者改后缀/指定目录下图片或者子目录图片写入txt/csv
本文介绍了如何使用Python的os模块来操作文件,包括更改文件后缀、分割文件路径和后缀、将指定目录下的所有图片写入txt文档,以及将指定目录下所有子目录中的图片写入csv文档,并为每个子目录分配一个标签。
15 1
|
29天前
|
小程序 Python
利用Python编程提取身份证的信息
利用Python编程提取身份证的信息
|
29天前
|
编解码 UED Python
Python批量修改指定目录下图片的大小名文章
Python批量修改指定目录下图片的大小名文章
15 1
|
7天前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
30天前
|
iOS开发 MacOS Python
Python编程小案例—利用flask查询本机IP归属并输出网页图片
Python编程小案例—利用flask查询本机IP归属并输出网页图片