본문 바로가기

개발/Python

python nmap 모듈 분석

윈도우즈 환경에서 nmap 파이썬 모듈을 사용하기 위해 인터넷 자료를 찾아보았지만 

잘 정리된 문서가 없는 것 같다.


그래서 직접 실행을 하면서 정리해보았다.


1. 설치 방법


http://xael.org/norman/python/python-nmap/


다음의 사이트에서 모듈 파일을 다운받는다.


참고로 파이썬 2.7 버전을 쓰시는 사용자는 다음 파일을 다운받으면 된다.



python-nmap-0.1.4.tar.gz


압축을 푼 뒤 


다음 명령어를 사용해 모듈을 설치한다.


 python setup.py install




2. 모듈 분석


1) nmap.PortScanner


 - 예제 :


    >>> import nmap

    >>> nm = nmap.PortScanner()

    >>> nm.scan('127.0.0.1', '22-443')

    >>> nm.command_line()

    u'nmap -oX - -p 22-443 -sV 127.0.0.1'

    >>> nm.scaninfo()

    {u'tcp': {'services': u'22-443', 'method': u'connect'}}

    >>> nm.all_hosts()

    [u'127.0.0.1']

    >>> nm['127.0.0.1'].hostname()

    u'localhost'

    >>> nm['127.0.0.1'].state()

    u'up'

    >>> nm['127.0.0.1'].all_protocols()

    [u'tcp']

    >>> nm['127.0.0.1']['tcp'].keys()

    [80, 25, 443, 22, 111]

    >>> nm['127.0.0.1'].has_tcp(22)

    True

    >>> nm['127.0.0.1'].has_tcp(23)

    False

    >>> nm['127.0.0.1']['tcp'][22]

    {'state': u'open', 'reason': u'syn-ack', 'name': u'ssh'}

    >>> nm['127.0.0.1'].tcp(22)

    {'state': u'open', 'reason': u'syn-ack', 'name': u'ssh'}

    >>> nm['127.0.0.1']['tcp'][22]['state']

    u'open'


 - 정보 : 포트 스캐너 기능


 - 구현 : 클래스


 - 다음과 같은 방식으로 사용


 portScanner = nmap.PortScanner()

 portScanner['ip address'].함수이름()

 또는

 portScanner.함수이름()


 - 함수 종류


 - all_hosts() : 정렬된 모든 호스트의 리스트를 반환 


 - command_line() : 스캔에 쓰인 커맨드라인 반환


 - get_nmap_last_output() : nmap이 출력한 가장 최근 문자열(디버깅 용도)


 - has_host(host) : 결과에 해당 호스트가 존재하는지 확인


 - listscan(hosts='127.0.0.1') : 스캔을 하지는 않지만 타겟 호스트를 해석한 뒤 호스트 목록을 반환


 - nmap_version() : nmap의 버전 출력


 - scan(hosts='127.0.0.1', ports=None, arguments='-sV') : 주어진 호스트를 스캔

- hosts : 도메인또는 IP 주소

예제 'scanme.nmap.org'  또는 '198.116.0-255.1-127' 또는 '216.163.128.20/20'


- ports : 포트 

예제 : '22,53,110, 143-4564'


- arguments : 인자 

예제 '-sU -sX -sC'


 - scaninfo() : scaninfo 구조체 반환 

예제 : {u'tcp': {'services': u'22', 'method': u'connect'}}


 - scanstats() : scanstats 구조체 반환 

예제 : {'uphosts': u'3', 'timestr': u'Thu Jun  3 21:45:07 2010', 'downhosts': u'253', 'totalhosts': u'256', 'elapsed': u'5.79'}