![]() |
|
Port scanner - help needed - Printable Version +- Sinisterly (https://sinister.ly) +-- Forum: Coding (https://sinister.ly/Forum-Coding) +--- Forum: Python (https://sinister.ly/Forum-Python) +--- Thread: Port scanner - help needed (/Thread-Port-scanner-help-needed) |
Port scanner - help needed - theRandy - 10-12-2013 Ok so ive made my port scanner it seems to be working fine besides im having one annoying little issue, the code is as follows: Code: import optparse
import socket
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('ViolentPython\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:
t = Thread(target=connScan, args=(tgtHost, int(tgtPort)))
t.start()
def main():
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] seperated by comma')
(options, args) = parser.parse_args()
tgtHost = options.tgtHost
tgtPorts = str(options.tgtPort).split(', ')
if(tgtHost == None) | (tgtPorts[0] == None):
print parser.usage
exit(0)
portScan(tgtHost, tgtPorts)
if __name__ == '__main__':
main()Output: Code: [+] Scan Results for: 192.254.234.250
[+]21/tcp open
[+] 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 6 of 50 allowMy issue is that when i run it using the command: python portScanner.py -H <hostname> -p <port[s]> it only works when i only put one port there, if i try to put another port to scan separated by a comma it gives the following error: Code: [+] Scan Results for: 192.254.234.250
Traceback (most recent call last):
File "portScanner.py", line 51, in <module>
main()
File "portScanner.py", line 49, in main
portScan(tgtHost, tgtPorts)
File "portScanner.py", line 34, in portScan
t = Thread(target=connScan, args=(tgtHost, int(tgtPort)))
ValueError: invalid literal for int() with base 10: '21,'if i put a space before the comma after the first port it runs but doesnt scan for the second port: Code: root@kali:~/Scripts/portScanner# python portScanner.py -H julzlane.com -p 21 , 1720
[+] Scan Results for: 192.254.234.250
[+]21/tcp open
[+] 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 7 of 50 allowAny idea why this is happening? Any help would be much appreciated (oh and btw im completely new to python, please if possible reply in detail) Thankyou RE: Port scanner - help needed - Slarek - 10-12-2013 I'm not good at Python but could it be possible that your program doesn't understand the assignment of taking multiple inputs. Code: input = raw_input("Enter three numbers separated by commas: ")
input_list = input.split(',')
numbers = [float(x.strip()) for x in input_list]RE: Port scanner - help needed - theRandy - 10-12-2013 (10-12-2013, 08:41 AM)Slarek Wrote: I'm not good at Python but could it be possible that your program doesn't understand the assignment of taking multiple inputs. That could well be it thanks, as i said im completely new to python and programming in general and am going through a book called Violent Python. How would i go about editing my code to get this to work? RE: Port scanner - help needed - Slarek - 10-12-2013 (10-12-2013, 08:57 AM)theRandy Wrote:(10-12-2013, 08:41 AM)Slarek Wrote: I'm not good at Python but could it be possible that your program doesn't understand the assignment of taking multiple inputs. You could use user input instead of command line arguments. RE: Port scanner - help needed - theRandy - 10-12-2013 Wouldn't i have to pretty much change the entire script to do that? is there no way to do this whilst using command line arguments? RE: Port scanner - help needed - Slarek - 10-12-2013 Read these: http://stackoverflow.com/questions/12493934/multiple-lines-user-input-in-command-line-python-application http://www.cyberciti.biz/faq/python-command-line-arguments-argv-example/ RE: Port scanner - help needed - theRandy - 10-12-2013 (10-12-2013, 09:23 AM)Slarek Wrote: Read these: Thanks ill read over those now, i figured it out though. changed line 45 to --> tgtPorts = str(options.tgtPort).split(',') instead of: --> tgtPorts = str(options.tgtPort).split(', ') for some reason it works if i dont have the space after the comma between each port, outputs as follows: Code: python portScanner.py -H 192.168.1.1 -p 80,21
[+] Scan Results for: 192.168.1.1
[-]21/tcp closed
[+]80/tcp open
[+]Thanks for the help |