2017-12-30 3 views
0

내 침투 테스트 연구소의 여러 호스트에 대해 snmpwalk의 실행을 자동화하려고합니다. 기본적으로 내 파이썬 스크립트에 대상 IP 목록 (텍스트 파일 형식)을 제공하고 snmpwalk를 실행하여 결과를 개별 파일 (대상 IP 당 하나)에 저장합니다. .Python 3 - subprocess.call 모듈의 stdout 인수를 사용하여 파일에 쓰기 문제

def run_snmpwalk(selection): 
    # Rewind file 
    live_list.seek(0) 
    if selection == '1': 
      i = 0 
      for line in live_list: 

        tgt_host = line.strip("/\n") 
        file_obj_array[i].write('[+] SNMPWalk user enumeration for IP: ' + tgt_host + ' \n') 
        print('[+] Attempting to enumerate users from IP: ' + tgt_host) 
        exit_code = subprocess.call(['snmpwalk', '-c', 'public', '-v1', tgt_host, '1.3.6.1.4.1.77.1.2.25'], stdout=file_obj_array[i]) 
        i += 1 
        if exit_code == 0: 
          print('[+] Success') 
        else: 
          print('[+] Something went wrong while executing snmpwalk ') 

가있을만큼 엉터리, 위의 코드를 작동 나는 하나 개의 작은 세부 사항이 제외에 의도 한대로 다음은 live_list 오브젝트 파일에 포함 된 대상 IP에 대해 도구를 실행 내 코드의 일부입니다 나는 고칠 수 없다. 파일에 헤더를 작성하도록되어

subprocess.call(['snmpwalk', '-c', 'public', '-v1', tgt_host, '1.3.6.1.4.1.77.1.2.25'], stdout=file_obj_array[i]) 

그리고이 다음 라인 :

선 아래 내가 이전 명령의 출력을 위해 생성 된 파일에 설정된 stdout 매개 변수를 subprocess.call 모듈을 사용 이는에 이전 명령의 출력에 덤프되는 : 그것이전에 실행에도 불구하고 대신 헤더와 결말의, 그러나

file_obj_array[i].write('[+] SNMPWalk user enumeration for IP: ' + tgt_host + ' \n') 

라인은 위의 파일의 맨 아래에 끝라인.

iso.3.6.1.4.1.77.1.2.25.1.1.5.71.117.101.115.116 = STRING: "Guest" 
iso.3.6.1.4.1.77.1.2.25.1.1.6.97.117.115.116.105.110 = STRING: "austin" 
iso.3.6.1.4.1.77.1.2.25.1.1.9.73.85.83.82.95.83.82.86.50 = STRING: "IUSR_SRV2" 
iso.3.6.1.4.1.77.1.2.25.1.1.9.73.87.65.77.95.83.82.86.50 = STRING: "IWAM_SRV2" 
iso.3.6.1.4.1.77.1.2.25.1.1.13.65.100.109.105.110.105.115.116.114.97.116.111.114 = STRING: "Administrator" 
iso.3.6.1.4.1.77.1.2.25.1.1.14.84.115.73.110.116.101.114.110.101.116.85.115.101.114 = STRING: "TsInternetUser" 

[+] SNMPWalk user enumeration for IP: 10.11.1.128 

subprocess.callfile_obj_array[i].write 전에 파일에 라인을 작성하는 관리 왜 알아낼 수 없습니다가 for 루프에서 다음에 오는에도 불구하고, 다음은 위의 기능의 샘플 출력 파일입니다.

어떤 아이디어라도 도움이됩니다.

감사합니다.

답변

1

당신은 버퍼를 플러시 할 수 있습니다

def run_snmpwalk(selection, live_list, file_obj_array): 
    # Rewind file 
    live_list.seek(0) 
    if selection == '1': 
     for line, file_obj in zip(live_list, file_obj_array): 
      tgt_host = line.strip("/\n") 
      file_obj.write('[+] SNMPWalk user enumeration for IP: {}\n'.format(tgt_host)) 
      file_obj.flush() 
      print('[+] Attempting to enumerate users from IP: {}'.format(tgt_host)) 
      exit_code = subprocess.call(['snmpwalk', '-c', 'public', '-v1', tgt_host, '1.3.6.1.4.1.77.1.2.25'], stdout=file_obj) 
      if exit_code == 0: 
       print('[+] Success') 
      else: 
       print('[+] Something went wrong while executing snmpwalk ') 
+0

감사 다니엘! 문제가 해결되었습니다. – eviesca