[컴][파이썬] Simple port scanner

간단한 포트 스캐닝 프로그램 / 포트 스캐너 / 파이썬 간단 네트워크 프로그래밍




source from : Violent-Python-Examples/1-portScan.py at master · shadow-box/Violent-Python-Examples · GitHub

#-*- coding: utf-8 -*-

import optparse
from socket import *
from threading import *

screenLock = Semaphore(value =1)
def connScan(tgtHost, tgtPort):
    try:
        connSkt = socket(AF_INET, SOCK_STREAM)
        connSkt.connect((tgtHost, tgtPort))
        connSkt.send('Test Python\r\n')
        results = connSkt.recv(100)

        screenLock.acquire()
        print '[ +]%d/tcp open'% tgtPort
        print '[ +] ' + str(results)
    except:
        screenLock.acquire()
        print '[-]%d/tcp closed'% tgtPort
    finally:
        screenLock.release()
        connSkt.close()


def portScan(tgtHost, tgtPorts):
    try:
        tgtIP = gethostbyname(tgtHost)
    except:
        print "[-] Cannot resolve '%s': Unknown host"%tgtHost
        return
    try:
        tgtName = gethostbyaddr(tgtIP)
        print '\n[ +] Scan Results for: ' + tgtName[0]
    except:
        print '\n[ +] Scan Results for: ' + tgtIP
    setdefaulttimeout(1)

    for tgtPort in tgtPorts:
        print 'Scanning port ' + tgtPort

        # connScan(tgtHost, int(tgtPort))
        t = Thread(target =connScan, args =(tgtHost, int(tgtPort)))
        t.start()
        


def getOpt():
    parser = optparse.OptionParser('usage %prog –H' +\
        '<target host> -p <target port>')
    parser.add_option('-H', dest ='tgtHost', type ='string', \
        help ='specify target host')
    parser.add_option('-p', dest ='tgtPort', type ='string', \
        help ='specify target port[s] separated by comma')
    (options, args) = parser.parse_args()

    tgtHost = options.tgtHost
    tgtPorts = str(options.tgtPort).split(',')

    if (tgtHost == None) | (tgtPorts[0] == None):
        print '[-] You must specify a target host and port[s].'
        exit(0)
    return tgtHost, tgtPorts


def main():
    tgtHost, tgtPorts = getOpt()
    portScan(tgtHost, tgtPorts)
    


if __name__ == '__main__':
    main()



See Also

  1. python-nmap : using nmap from python
  2. Violent-Python-Examples/2-nmapScan.py at master · shadow-box/Violent-Python-Examples · GitHub





댓글 없음:

댓글 쓰기