Python-nmap Module/Lib
#1
Halo ...Back lagi bersama sy jimmyromanticdevil ...hmm kali ini sy akan membahas tentang modul/lib python yang bernama python-nmap .yang dimana sy sendiri habis mencoba dan explore tentang lib python yang satu ini karena membantu tugas teman dalam pembuatan tools administrator systemnya..ya sebuah tools untuk task schedule scanning dan reporting dengan para worker/message broker dari celery..dan lib ini sangat berguna bgi sy..ya dari namanyanya mungkin sudah tidak asing bagi kita 'nmap' berarti module ini ad kaitannya dengan nmap yah ?? yah benar..python-nmap adalah library python yang membantu dalam menggunakan nmap.Hal ini memudahkan kita untuk memanipulasi hasil scan nmap. dan juga tool untuk administrator sistem yang ingin automatize scanning task dan reporting.

Nah Python-nmap ini di buat default untuk support python 3.xx kalian bisa mendownloadnya di sini http://xael.org/norman/python/python-nma...2.4.tar.gz ..trus gimana dong untuk python 2.x.x ?? tenang .. ad juga kuq lib untuk versi python 2.x.x ke bawah ... kalian bisa mendownloadnya di sini http://xael.org/norman/python/python-nma...1.4.tar.gz

Instalisasi

Di sini sy mengunakan python 2.x.x ke bawah jadi untuk kalian yang mengunakan python 3.x.x silahkan di sesuaikan.

jimmyromanticdevil@jimmyromanticdevil:~/toolsadminsystem$ tar xfz python-nmap-0.1.4.tar.gz
jimmyromanticdevil@jimmyromanticdevil:~/toolsadminsystem$ cd python-nmap-0.1.4/
jimmyromanticdevil@jimmyromanticdevil:~/toolsadminsystem/python-nmap-0.1.4$ ls
CHANGELOG gpl-3.0.txt nmap PKG-INFO README.txt setup.py
jimmyromanticdevil@jimmyromanticdevil:~/toolsadminsystem/python-nmap-0.1.4$ sudo python setup.py install

Ok penginstalan module/lib sudah selesai .. mari kita mulai bermain dengan modulenya .. Smile

Kali ini kita akan bermain dengan modus interaktif python yah .. jadi buka Terminal ketik python .

Code:
>>> import nmap #import module nmap
>>> dir(nmap) # lihat isi object yang ad di module nmap
['PortScanner', 'PortScannerAsync', 'PortScannerError', 'PortScannerHostDict', '
Process', '__author__', '__builtins__', '__doc__', '__file__', '__name__', '__pa
ckage__', '__path__', '__version__', 'nmap', 'os', 're', 'shlex', 'string', 'sub
process', 'sys', 'types', 'xml']

>>> set = nmap.PortScanner() #kali ini kita akan megunakan method/object PortScanner()

>>> dir(set) # lihat isi var set sekarang
['_PortScanner__process', '__class__', '__delattr__', '__dict__', '__doc__', '__
format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__module_
_', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__size
of__', '__str__', '__subclasshook__', '__weakref__', '_nmap_last_output', '_nmap
_subversion_number', '_nmap_version_number', '_scan_result', 'all_hosts', 'comma
nd_line', 'get_nmap_last_output', 'has_host', 'listscan', 'nmap_version', 'scan'
, 'scaninfo', 'scanstats'] # dia akan menampung object dari Postscanner()

>>> set.scan('127.0.0.1','22-80') # kita akan mengunakan object scan host 127.0.0.1, port dari 22 sampai 80

{'nmap': {'scanstats': {'uphosts': u'1', 'timestr': u'Fri Nov 18 00:00:04 2011',
'downhosts': u'0', 'totalhosts': u'1', 'elapsed': u'6.13'}, 'scaninfo': {u'tcp'
: {'services': u'22-80', 'method': u'connect'}}, 'command_line': u'nmap -oX - -p
22-80 -sV 127.0.0.1'}, 'scan': {u'127.0.0.1': {'status': {'state': u'up', 'reas
on': u'syn-ack'}, 'hostname': u'localhost.localdomain', u'tcp': {80: {'state': u
'open', 'reason': u'syn-ack', 'name': u'http'}}}}} #result dari hasil scan.dia berbentuk dictionary python yah ..jadi cara kita untuk memisakannya dengan mengunakan syntax2 umum python dalam pengunaan dictionary.

>>>
>>> set.scaninfo() # dapatkan informasi dari hasil scan tadi
{u'tcp': {'services': u'22-80', 'method': u'connect'}}

>>> set.all_hosts() # nah dapatkan semua host dari hasil scanning td. karena di sini sy scan localhost jadi host yang terdapat cmn 1 .
[u'127.0.0.1']

>>> set.command_line() # nah ini kl kita mau lihat command ap yang di gunakan untuk scaning td ,kita bs mengganti command ini .tgu selanjutnya
u'nmap -oX - -p 22-80 -sV 127.0.0.1'

>>> set['127.0.0.1'].hostname() # nah di sini kita ingin tau tentang hostname dari host 127.0.0.1
u'localhost.localdomain' # dan ternyata localhost ... dan memang localhost :P .. kl google dia akan muncul google.com kuq .tergantung dari hostnya ;)

>>> set['127.0.0.1'].state() # nah di sini kt dapatkan state/status dari host 127.0.0.1 (up|down|unknown|skipped)
u'up' # up berarti host lagi up .kl down berarti host lagi down dll.

>>> set['127.0.0.1'].all_protocols() # semua protokol yang di scan terdapat  ['tcp'] dari (ip|tcp|udp|sctp)
[u'tcp']

>>>

>>> set['127.0.0.1']['tcp'].keys() # nah karena TCP maka sekarang kt dapatkan semua port untuk tcp protocol
[80] # dan di dapatkan 1 port yang open yaitu 80

>>> set['127.0.0.1'].has_tcp(80) # apakah ada informasi tentang port 80/tcp di host 127.0.0.1 . jk ada maka dia akan True jika tdk akan False
True

>>> set['127.0.0.1'].has_tcp(20) # seperti di ketahui kt tidak mendapatkan port 20 maka nilai false
False

>>> set['127.0.0.1']['tcp'][80] # dapatkan info tentang port 80/tcp di host 127.0.0.1
{'state': u'open', 'reason': u'syn-ack', 'name': u'http'}

>>> set['127.0.0.1'].tcp(80) #dapatkan info tentang port 80/tcp di host 127.0.0.1  syntax sama fungsinya . seperti di atas
{'state': u'open', 'reason': u'syn-ack', 'name': u'http'}

>>> set['127.0.0.1']['tcp'][80]['state'] # nah di sini kt dapatkan state/status dari host 127.0.0.1 hampir sama dengan di atas cuman state/statusnya di sini agak beda yaitu (open|close)

u'open'
>>>
ok sy kira cukup untuk di modus interaktif python .. mari coba kita jalankan melalui interpreter python dengan argumen
Code:
#!/usr/bin/python
import nmap
import sys

def main(arg1,arg2):
    sett = nmap.PortScanner()
    sett.scan(arg1, arg2)
    for host in sett.all_hosts():
        for proto in sett[host].all_protocols():
            lport = sett[host][proto].keys()
            lport.sort()
            for port in lport:
                print"""
        ----------------------------------------------------
        Host : %s (%s)'
        
        State : %s
        
        Protocol : %s
        
        Port : %s\tstate : %s'
        -----------------------------------------------------
        """%(host, sett[host].hostname(),sett[host].state(),proto,port, sett[host][proto][port]['state'])

if __name__ == "__main__":
     if len(sys.argv) == 3:
           main(sys.argv[1],sys.argv[2])
     else:
        print """
        Usage :
        python code.py ipaddr startport-endport
        python code.py 120.0.0.1 22-443
        """
        sys.exit()

Output :
Code:
jimmyromanticdevil@jimmyromanticdevil:~$ python code.py 120.0.0.1 80-90

        ----------------------------------------------------
        Host : 120.0.0.1 ()'
        
        State : up
        
        Protocol : tcp
        
        Port : 80    state : open'
        -----------------------------------------------------
        

        ----------------------------------------------------
        Host : 120.0.0.1 ()'
        
        State : up
        
        Protocol : tcp
        
        Port : 81    state : open'
        -----------------------------------------------------

Cuman itu ?? tidak cuman itu kalian juga bisa melakukan pingsweep di sini ..

Code:
#!/usr/bin/python
import nmap
import sys

def main(arg1):
    sett = nmap.PortScanner()
    sett.scan(hosts=arg1, arguments='-n -sP -PE -PA21,23,80,3389')
    hosts_list = [(x, sett[x]['status']['state']) for x in sett.all_hosts()]
    for host, status in hosts_list:
        print'%s,%s'%(host, status)


if __name__ == "__main__":
     if len(sys.argv) == 2:
           main(sys.argv[1])
     else:
        print """
        Usage :
        python code.py 192.168.88.1/24->endip
        """
        sys.exit()

Output:

Code:
jimmyromanticdevil@jimmyromanticdevil:~$ python code.py 192.168.88.1/24
Warning:  You are not root -- using TCP pingscan rather than ICMP
192.168.88.0,down
192.168.88.1,up
192.168.88.10,up
192.168.88.100,up
192.168.88.101,up
192.168.88.102,up
192.168.88.103,up
192.168.88.104,up
192.168.88.105,up
192.168.88.106,up
192.168.88.107,up
192.168.88.108,up
192.168.88.109,up
192.168.88.11,up
192.168.88.110,up
192.168.88.111,up
192.168.88.112,up
192.168.88.113,up
192.168.88.114,up
192.168.88.115,up

Ada lagi ?? ya ad feature lagi dari python-nmap ini yaitu Asynchronous dengan mengunakan object dalam module nmap "PortScannerAsync".


Code:
#!/usr/bin/python
import nmap
import sys

def main(arg1):
       nma = nmap.PortScannerAsync()
       def callback_result(host, scan_result):
           print '------------------'
           print host, scan_result
       nma.scan(hosts=arg1, arguments='-sP', callback=callback_result)
       while nma.still_scanning():
                 print("Waiting ...")
                 nma.wait(2)


if __name__ == "__main__":
     if len(sys.argv) == 2:
           main(sys.argv[1])
     else:
        print """
        Usage :
        python code.py 192.168.88.1/24->endip->endip
        """
        sys.exit()

OUTPUT:
Code:
jimmyromanticdevil@jimmyromanticdevil:~$ python code.py 192.168.88.1/24
Waiting ...
Waiting ...
Waiting ...
Waiting ...
Waiting ...
Waiting ...
Waiting ...
Waiting ...
Waiting ...
Waiting ...
Waiting ...
Waiting ...
Waiting ...
Waiting ...
Waiting ...
------------------
192.168.88.0 {'nmap': {'scanstats': {'uphosts': u'0', 'timestr': u'Fri Nov 18 01:59:14 2011', 'downhosts': u'1', 'totalhosts': u'1', 'elapsed': u'0.00'}, 'scaninfo': {}, 'command_line': u'nmap -oX - -sP 192.168.88.0'}, 'scan': {u'192.168.88.0': {'status': {'state': u'down', 'reason': u'net-unreach'}, 'hostname': ''}}}
Waiting ...
------------------
192.168.88.1 {'nmap': {'scanstats': {'uphosts': u'0', 'timestr': u'Fri Nov 18 01:59:17 2011', 'downhosts': u'1', 'totalhosts': u'1', 'elapsed': u'3.01'}, 'scaninfo': {}, 'command_line': u'nmap -oX - -sP 192.168.88.1'}, 'scan': {u'192.168.88.1': {'status': {'state': u'down', 'reason': u'no-response'}, 'hostname': ''}}}
Waiting ...
Waiting ...
------------------
192.168.88.10 {'nmap': {'scanstats': {'uphosts': u'0', 'timestr': u'Fri Nov 18 01:59:20 2011', 'downhosts': u'1', 'totalhosts': u'1', 'elapsed': u'3.00'}, 'scaninfo': {}, 'command_line': u'nmap -oX - -sP 192.168.88.10'}, 'scan': {u'192.168.88.10': {'status': {'state': u'down', 'reason': u'no-response'}, 'hostname': ''}}}
Waiting ...
Waiting ...
Waiting ...

woow masih ad lagi ??? ya silahkan explore sendiri .. banyak kuq yang bisa di explore .. Wink selanjutnya sy serahkan kepada kalian para coder2 .. happy coding .... hapy researching .. smg berguna .. Wink


Special thanks untuk Refresni:
http://pypi.python.org/pypi/python-nmap

#2
wah mantap bro
thx info nya...Big Grin

#3
mantaappp bro... thanks infonya, jadi bisa lebih leluasa bangun tools networking.. hehehe

#4
sangat berguna jim...
keren ..Tongue

#5
Liyan OS .. bisa tapi silahkan di modif saja codenya spy lebih bagus .. ini resultnya masih terhambur .... w sengaja pasang buat demo sj ... Wink happy explore






Users browsing this thread: 1 Guest(s)