2016-06-02 1 views
0

나는 기본적으로 AWS의 모든 EIP를 수집하고 하나씩 스캔하여 작동하는 libnmap 스캐너 스크립트, 수집하는 기능을 가지고 EIP의 모습을 모든 :한 번에 한 요소의 목록 내용을 메서드에 전달하는 방법은 무엇입니까?

def gather_public_ip(): 
    ACCESS_KEY = config.get('aws','access_key') 
    SECRET_KEY = config.get('aws','secret_key') 
    regions = regions = ['us-west-2','eu-central-1','ap-southeast-1'] 
    all_EIP = [] 
    for region in regions: 
     client = boto3.client('ec2',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,region_name=region,) 
     addresses_dict = client.describe_addresses() 
     for eip_dict in addresses_dict['Addresses']: 
     if 'PrivateIpAddress' in eip_dict: 
      print eip_dict['PublicIp'] 
      all_EIP.append(eip_dict['PublicIp']) 
     print all_EIP 
     return all_EIP 

이 기능은 기본적으로 나에게 보이는 목록을 반환 추천

['22.22.124.141', '22.21.149.191', '22.11.132.122', '22.11.227.241', '22.34.28.112', '22.34.211.227', '22.27.21.233', '22.24.199.122', '22.11.113.171', '22.21.11.8', '22.33.31.14', '22.37.19.213', '22.24.121.112', '22.32.121.132', '22.24.21.1', '22.34.72.198'] 

제가 상기 방법은 다음과 같다 내 실제 스캐너 기능에 전달 호출되는 주요 기능 :

s = Scanner(config) 

     # Execute Scan and Generate latest report 
     net_range = gather_public_ip() # config.get('sources','networks') ## Call DEF 
     #print type(net_range) 
     r = s.run(net_range) 
     s.save() # save to pickle 
,451,515,

은 스캐너 클래스는 다음과 같습니다 나는 그래서 nmap은 그것을 처리 할 수있는 하나 실행 방법을 하나의 목록에서 값을 전달할 수있는

class Scanner(object): 
    """Container for all scan activies""" 

    def __init__(self,cp): 
     self.config = cp # read in ConfigParser object to get settings 
     self.report = None 

    def gather_targets(self): 
     """Gather list of targets based on configured sources""" 
     pass 

    def run(self, targets="" ,options="-Pn"): 
     #start a new nmap scan on localhost with some specific options 

     syslog.syslog("Scan started") 
     parsed = None 
     nmproc = NmapProcess(targets,options) 
     rc = nmproc.run() 

사람이 바로 지금, 부분 좀 도와 주시겠습니까 그것은 단지 멍하니 앉아있다

+0

@DmitryTokarev 당신이 그것을 읽는 동안 왜 제목과 태그도 수정하지 않았습니까? – gboffi

+0

@gboffi missed it :( –

+0

'NmapProcess'가 한 번에 오직 하나의 IP 주소만을 다룰 수 있다면 _list comprehension_,'r = [s.run (ip) for net_range]'를 사용할 수 있습니다. 물론 객체 처리해야 할 것은 메소드에 의해 반환 된 객체의리스트가 될 것입니다. – gboffi

답변

1

인자를 전달하는 방식이 좋아 보인다. 그러나 실제로 결과를 사용하는 코드는 없습니다. 이 같은 Scanner.run을 변경

시도 :이 바로 the docs에서 가져

class Scanner(object): 
    ... 
    def run(self, targets="" ,options="-Pn"): 
     #start a new nmap scan on localhost with some specific options 

     syslog.syslog("Scan started") 
     parsed = None 
     nmproc = NmapProcess(targets,options) 

     nmproc.run_background() 
     while nmproc.is_running(): 
      print("Nmap Scan running: ETC: {0} DONE: {1}%".format(nmproc.etc, 
                    nmproc.progress)) 
      sleep(2) 

     print("rc: {0} output: {1}".format(nmproc.rc, nmproc.summary)) 

.

+0

이 붙어 있습니다. 코드 변경을 시도했지만 해결되지 않았습니다. –

+0

미안하지만 분명하지 않으면 죄송합니다. , 내 편집을 참조하십시오 –

+0

이것은 멋지지만, 나는 실제로'rc'를 사용합니다. 그래서'rc = nmproc.run()'을 앞에두면,이게 작동 할 것입니다. –

관련 문제