Python 提取图片中的GPS信息
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()
Python 提取图片中的GPS信息的更多相关文章
- python 提取linux的硬件信息
1.代码实现目的 注:代码可以直接粘贴使用 为了实现对主机的整体有明确的了解,实现了下面的代码功能 代码主要功能是: 提取到主机的内存.硬盘.CPU.型号等信息 插入到mysql的数据库中 2.代码具 ...
- 使用 python 提取照片中的手机信息
使用 python 提取照片中的手机信息 最近在做一个项目,有一个很重要的点是需要获取使用用户的手机信息,这里我选择从照片中获取信息.有人会问为什么不从手机里面直接获取设备信息.由于现在android ...
- 实战项目——获取图片中的GPS位置信息和拍摄时间
今天突然看到有人写过获取图片中位置信息的程序.我觉得很有趣,也就自己实践了一下,研究了一下 话不多说,先上代码 #!/usr/bin/env python3 # -*- coding: utf-8 - ...
- python学习笔记——爬虫中提取网页中的信息
1 数据类型 网页中的数据类型可分为结构化数据.半结构化数据.非结构化数据三种 1.1 结构化数据 常见的是MySQL,表现为二维形式的数据 1.2 半结构化数据 是结构化数据的一种形式,并不符合关系 ...
- 文件读写以及NMEA码中GPS信息的提取
首先先了解下什么是NMEA码,这里有很好的解释,就不直接搬运了 http://www.gpsbaby.com/wz/nmea.html 首先要找到包含GPS信息的文本行,即字符串GPGGA所在行 $G ...
- 利用Python读取图片exif敏感信息
众所周知,现在很多的照相机等软件,拍摄会有选项,是否包含位置信息等. 当然有的人会说,我在微信中查看图片exif信息并没有啊,这是因为你发送到微信服务器的时候,微信帮你完成了保密工作. 常见的图片中包 ...
- python提取浏览器Cookie
在用浏览器进行网页访问时,会向网页所在的服务器发送http协议的GET或者POST等请求,在请求中除了指定所请求的方法以及URI之外,后面还跟随着一段Request Header.Request He ...
- 利用strstr和sscanf解析GPS信息
比如说我们要做一个GPS导航的项目,需要读取GPS模块以ASCII码的形式发送过来的数据,然后对这些数据进行处理,提取我们需要的信息.这就涉及到很多操作字符串的问题.下面就以此为例,利用strstr函 ...
- python操作txt文件中数据教程[2]-python提取txt文件
python操作txt文件中数据教程[2]-python提取txt文件中的行列元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原始txt文件 程序实现后结果-将txt中元素提取并保存在c ...
- 如何用ABBYY FineReader提取图片中的文字
作为OCR文字识别软件中的佼佼者,可能大家对于ABBYY FineReader的使用还不熟练,没关系,今天小编就为大家演示,如何用ABBYY FineReader这款文字识别软件,将一张截图中的文字识 ...
随机推荐
- 【Django drf】认证类 权限类 频率类 过滤类 排序类 分页类
目录 认证类 前期准备 自定义认证类 配置认证类 全局配置 局部禁用 认证组件使用步骤 基于类中方法的认证(了解) 权限类 前期准备 重写has_permission() 添加权限不足信息 权限组件使 ...
- 流媒体传输协议之 RTMP
作者:逸殊 审核:泰一 简介 RTMP 在可靠流式传输(TCP)的基础上提供了双向的消息多路复用服务,在通讯双方之间传输与时间相关的并行流数据,如音频,视频和数据消息.协议实现方通常为不同的消息类型指 ...
- AtCoder Beginner Contest 218 A~D
比赛链接:Here A - Weather Forecas 水题,判断 \(s[n - 1] = o\) 的话输出 YES B - qwerty 题意:给出 \((1,2,...,26)\) 的某个全 ...
- <vue初体验> 基础知识 4、 vue的生命周期
系列导航 <vue初体验> 一. vue的引入和使用体验 <vue初体验> 二. vue的列表展示 <vue初体验> 三. vue的计数器 <vue初体验&g ...
- 在vue项目中使用momentjs获取今日、昨日、本周、本月、上月、本年、上年等日期,时间比较计算
https://blog.csdn.net/qq_15058285/article/details/119925056
- 《vuejs快跑构建触手可及的高性能web应用》读书笔记
1.cdn:内容分发网络(CDN)是将资源托管到全世界各处的服务器上以实现快速分发.CDN版本对于开发和快速验证比较有用,但是将unpkg应用于生产环境前,需要检查它是否适合你. 2.假值包括fals ...
- Flume原理及使用案例
本文为转载篇!原文: https://www.cnblogs.com/zhangyinhua/p/7803486.html https://www.cnblogs.com/ciade/p/549521 ...
- freeswitch配置SBC实例
概述 freeswitch 是一款好用的开源软交换平台. 随着voip客户的发展和运营商网络的升级换代,SBC在对接测试中的应用场景越来越多. freeswitch通过简单的安装配置即可满足大部分SB ...
- VS2019 16.8下载安装
昨天,想升级到 net5版本,发现在vs2019上始终发现不了它,考虑好几个小时,终于狠下心,把vs2019卸载了,重新装一次.耗费了一个晚上,先将安装过程写下来,以供参考 第一步, 到 微软官网 h ...
- 简单剖析Hashmap
剖析 Java Hashmap 源码 在 Java 的集合框架中,HashMap 是一颗璀璨的明珠.通过深入挖掘其源码,我们将揭开 HashMap 的神秘面纱,理解其底层原理.扩容机制和数据结构. 1 ...