2016-07-28 16 views
1

Shodan (내가 nmap을 사용할 수 있지만 Shodan을 가지고 이것을 수행하고 싶어한다는 것을 알고있다.)과 네트워크를위한 모든 열린 포트를 얻고 싶다.Shodan.

문제는 웹 사이트에 "TOP 서비스"만 표시된다는 것이고 모든 서비스가 제공되기를 바랍니다. 이 그물 예를 들어

: 195.53.102.0/24 나는 다음 포트를 제공 이니

TOP SERVICES 
HTTP 15 
HTTPS 2 
DNS 2 
FTP 2 
IKE-NAT-T 1 

하지만이 순 스캔하면 : 195.53.0.0/16을, 나는 이러한 포트를 제공하고있다 :

TOP SERVICES 
HTTP 1,012 
HTTPS 794 
179 290 
IKE 238 
IKE-NAT-T 227 

dnsftp과 같은 서비스가 누락되었습니다.

나는 파이썬에서의 API와 함께 노력하고 있습니다 :

import shodan 

SHODAN_API_KEY = "XXXXXXXXXXXXXXXXXXXXXXx" 

api = shodan.Shodan(SHODAN_API_KEY) 

# Wrap the request in a try/ except block to catch errors 
try: 

    # Search Shodan 


    results = api.search('net:195.53.102.0/24') 
    for service in results['matches']: 
     print service['ip_str'] 
     print service['port'] 

except shodan.APIError, e: 
     print 'Error: %s' % e 

을 그리고이 결과는 내가 얻을 수 있습니다 : IP 당

195.53.102.193 
80 
195.53.102.138 
80 
195.53.102.148 
80 
195.53.102.136 
80 
195.53.102.157 
80 
195.53.102.226 
443 
195.53.102.66 
500 
195.53.102.133 
80 
195.53.102.142 
80 
195.53.102.66 
4500 
195.53.102.141 
80 
195.53.102.131 
21 
195.53.102.152 
53 
195.53.102.153 
21 
195.53.102.209 
80 
195.53.102.132 
53 
195.53.102.226 
80 
195.53.102.147 
80 
195.53.102.142 
443 
195.53.102.178 
80 
195.53.102.135 
143 
195.53.102.146 
80 
195.53.102.143 
80 
195.53.102.144 
80 

그냥 1 개 포트 및 예를 들어, IP : 195.53 .102.131 포트 21, 80 및 443 열려 있고, 내 결과는 말 :

195.53.102.131 
21 

대신 :

,
195.53.102.131 
21 
80 
443 

그래서 나는 IP 당 모든 포트뿐 아니라 1 또는 경우를 얻을 수있는 웹 사이트에서의 API에서 대신 상대 TOP SERVICES의 모든 포트/서비스를 제공 또는 수에 하나를 원하는 누구든지 더 나은 해결책을 가지고 있습니다. 나는 또한 그것을 듣고 싶습니다.

내가 말했듯이, 나는 nmap이 아니라 Shodan으로 그것을 수행하고 싶다. 미리 감사드립니다.

답변

1

api.search() 메서드를 사용하면 Shodan은 서비스 배너를 검색하고 서비스 배너에는 1 포트만 있습니다. 호스트의 모든 포트를 반환하려면 대신 api.host()을 사용해야합니다. 예를 들면 : 당신은 단지 네트워크에 열린 포트의 고장을 얻고 싶은 경우에

import shodan 

SHODAN_API_KEY = "XXXXXXXXXXXXXXXXXXXXXXx" 

api = shodan.Shodan(SHODAN_API_KEY) 

# Wrap the request in a try/ except block to catch errors 
try: 
# Search Shodan 
    results = api.search('net:195.53.102.0/24') 
    for service in results['matches']: 
     hostinfo = api.host(service['ip_str']) 

     print service['ip_str'] 
     #Not sure if it's correct, but you should do something, 
     #like this: 
     for port in hostinfo['port']: 
      print port 

except shodan.APIError, e: 
    print 'Error: %s' % e 
1

는 당신이 수() 방법을 사용할 수 있으며, 포트면을 부탁드립니다. 당신이 튜플로면 지정하는 경우 그리고 당신은 상위 5 개 포트보다 더 반환하는 API를 요청할 수 있습니다 :

import shodan 

api = shodan.Shodan(YOUR API KEY) 
result = api.count('net:195.53.102.0/24', facets=[['port', 20]]) 

상위 20 포트 (사용 가능한 경우) 결과에서 다음을 사용할 수 있습니다 [ '면'] [ 'port'] 속성 count() 메소드를 사용하면 API 크레딧이 사용되지 않으므로 사용 한도가 줄어들지 않습니다.