Notice
Recent Posts
Recent Comments
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
07-20 06:18
Today
Total
관리 메뉴

해킹공주의 일상

[Shodan] 쇼단 API를 이용한 Python 검색 자동화 본문

모의해킹/정보수집

[Shodan] 쇼단 API를 이용한 Python 검색 자동화

h4ckpr1n 2022. 12. 9. 11:38

1. 개요

쇼단에서 API를 제공해주는데 이를 활용해서 자동화 툴을 만들어 볼 수 있다. 간단하게 사용자로부터 검색어 입력값을 받아서 원하는 내용만 출력하는 코드를 공유하고자 한다.

 

※ 해당 내용을 바탕으로 남의 서버에 접근하거나 나쁜짓을 하면 불법!

 

2. 코드

2.1 초기 설정

- API 키 설정을 맨처음에 해줘야한다. API 키는 [Shodan 페이지] > [account] 에서 확인할 수 있다.

import shodan
SHODAN_API_KEY = "API키"
api = shodan.Shodan(SHODAN_API_KEY)

 

2.2 호스트 정보 확인하기

- IP정보를 바탕으로 해당 옵션을 활용해 원하는 정보를 가져올 수 있다.

# 1. IP 주소 등록
>>> results = api.host(['8.8.8.8']) 

# 2. 사용할 수 있는 키 값 확인
>>> results.keys() 
dict_keys(['city', 'region_code', 'os', 'tags', 'ip', 'isp', 'area_code', 'longitude', 'last_update', 'ports', 'latitude', 'hostnames', 'country_code', 'country_name', 'domains', 'org', 'data', 'asn', 'ip_str'])


# 3. 키값 출력
>>> results['city']
'Mountain View'
>>> results['ip_str']
'8.8.8.8'

 

2.3 사용자 검색어를 받아 원하는 내용을 출력하는 코드

- search 옵션사용하여 검색 수행

import shodan
SHODAN_API_KEY = "API키"
api = shodan.Shodan(SHODAN_API_KEY)

query = ''.join(sys.argc[1:])

# 1. search 옵션으로 입력값 검색
results = api.search('mongodb')

# 2. 매칭된 값들 출력
for result in results['matches']: 
	print(result['ip_str'])
	print(result['data'])

 

2.4 FTP 서비스가 익명으로 열려있는 서버 출력 코드

import shodan
import result

sites = []
SHODAN_API_KEY = "API키"
api = shodan.Shodan(SHODAN_API_KEY)

# 1. 입력값 받아오기
query = ''.join(sys.argc[1:])

# 2. Anonymous로 열려있는 서버 검색
results = api.search('port: 21 Anonymous user logged in')
print("hosts number:" + str(len(results['matches'])))


# 3. 매칭하면 데이터에서 IP정보만 추출하여 출력
for result in results['matches']: 
	if match['ip_str'] is not None:
	print(result['ip_str'])
	sites.apeend(match['ip_str'])
Comments