
인스타그램 프로필에서 사용 가능한 모든 지오태깅된 위치를 수집하여 지도에 표시하고 JSON으로 덤프하는 인스타그램 OSINT 도구입니다.
Instagram 프로필에서 위치 정보가 포함된 게시물을 스크래핑하는 도구입니다. 출력: JSON 및 인터랙티브 맵.
sudo apt install chromium-chromedriver && chmod a+x /usr/bin/chromedriver
git clone https://github.com/bernsteining/instaloctrack
cd instaloctrack
pip3 install .
또는 Docker 사용:
sudo docker build -t instaloctrack -f Dockerfile .
instaloctrack -h
usage: instaloctrack [-h] [-t TARGET_ACCOUNT] [-l LOGIN] [-p PASSWORD] [-v]
Instagram 위치 데이터 수집 도구. 사용법: python3 instaloctrack.py -t <대상 계정>
선택적 인자:
-h, --help 도움말 메시지를 표시하고 종료
-t TARGET_ACCOUNT, --target TARGET_ACCOUNT
조사할 Instagram 프로필
-l LOGIN, --login LOGIN
대상 계정의 게시물에 접근하기 위해 로그인할 Instagram 프로필
-p PASSWORD, --password PASSWORD
로그인할 Instagram 프로필의 비밀번호
-v, --visual Chromium GUI 실행, 그렇지 않으면 Chromium 헤드리스 모드
예시:
instaloctrack -t <대상_계정>
대상 프로필이 비공개이고 대상 프로필을 팔로우하는 계정이 있다면, 로그인 세션으로 데이터를 스크래핑할 수 있습니다:
instaloctrack -t <대상_계정> -l <내_계정> -p <내_비밀번호>
또는 Docker 사용:
sudo docker run -v /tmp/output:/tmp/output instaloctrack -t <대상_계정> -o /tmp/output
먼저, selenium의 webdriver를 이용해 전체 Instagram 프로필을 스크롤하며 계정의 모든 사진 링크를 수집합니다.
그런 다음, 비동기(asyncio)로 각 사진 링크를 가져와 사진 설명에 위치 정보가 포함되어 있는지 확인하고, 있으면 위치 데이터와 타임스탬프를 추출합니다.
Instagram이 GPS 좌표를 제공하지 않기 때문에, 위치 이름만으로 GPS 좌표를 얻기 위해 지오코딩을 수행해야 합니다.
이를 위해 OpenStreetMap을 사용하는 Nominatim의 훌륭한 API를 사용했습니다. 사용 시 API 키가 필요 없으며, Nominatim 사용 정책을 준수하여 1초에 한 번씩 GPS 좌표를 요청합니다.
마지막으로, 모든 GPS 좌표를 확보하면 jinja2 템플릿을 사용하여 Leaflet 라이브러리로 OpenStreetMap을 표시하고 모든 위치를 표시하는 HTML을 생성합니다. 이 단계에서도 API 키는 필요 없습니다.
또한, 스크립트가 수집한 데이터(위치 이름, 타임스탬프, GPS 좌표, 오류)는 재사용을 위해 JSON 파일로 덤프됩니다.
예를 들어, 프랑스 전 대통령의 Instagram 프로필 @fhollande에서 출력된 결과입니다:

히트맵:

마커 클릭 시 확인 가능한 정보:

위치 데이터 통계:

JSON 데이터 덤프 (특정 위치의 형식을 보여주기 위한 일부):
{
"link": "https://www.instagram.com/p/-Q_9EvR9eu",
"place": {
"id": "290297",
"name": "Musée du quai Branly - Jacques Chirac",
"slug": "musee-du-quai-branly-jacques-chirac",
"street_address": " 37 quai Branly",
" zip_code": " 75007",
" city_name": " Paris",
" region_name": " ",
" country_code": " FR"
},
"timestamp": "2015-11-19",
"gps": {
"lat": "48.8566969",
"lon": "2.3514616"
}
}