2015-08-17 1 views
0

J'ai écrit un petit script pour scanner un hôte pour une plage de port spécifique par choix et a couru dans une erreur bizarre tout en essayant de tester la gamme personnalisée:Python portscanner

Traceback (most recent call last): 
File "/root/Desktop/ScannerV1Beta.py", line 74, in <module> 
    result = s.connect_ex((targetIP, i)) 

File "/usr/lib/python2.7/socket.py", line 224, in meth 
    return getattr(self._sock,name)(*args) 

File "/usr/lib/python2.7/socket.py", line 170, in _dummy 
    raise error(EBADF, 'Bad file descriptor') 

    socket.error: [Errno 9] Bad file descriptor 
#!/usr/bin/env python 

from socket import * 


target = raw_input('Enter host or ip to scan: ') 
targetIP = gethostbyname(target) 
choice = raw_input('Please Choose the port range:\n (1) 1 - 1023 \n (2) 1024 - 5000 \n (3) 5000 - 10000 \n (c) custom \n ') 
print 'Starting scan on host ', targetIP 



if choice == '1': 
    for i in range(1, 134): 
     s = socket(AF_INET, SOCK_STREAM) 

     result = s.connect_ex((targetIP, i)) 

     if(result == 0) : 
      print 'Port %d: OPEN' % (i) 
     else: 
      print 'Port %d: CLOSED' % (i) 
     s.close() 

    for i in range(133, 1024): 
     s = socket(AF_INET, SOCK_STREAM) 

     result = s.connect_ex((targetIP, i)) 

     if(result == 0) : 
      print 'Port %d: OPEN' % (i) 
     else: 
      print 'Port %d: CLOSED' % (i) 

     s.close() 



elif choice == '2': 
    for i in range(1024, 5000): 
     s = socket(AF_INET, SOCK_STREAM) 

     result = s.connect_ex((targetIP, i)) 

     if(result == 0) : 
      print 'Port %d: OPEN' % (i) 
     else: 
      print 'Port %d: CLOSED' % (i) 

     s.close() 

if choice == '3': 
    for i in range(5000, 10000): 
     s = socket(AF_INET, SOCK_STREAM) 

     result = s.connect_ex((targetIP, i)) 

     if(result == 0) : 
      print 'Port %d: OPEN' % (i) 
     else: 
      print 'Port %d: CLOSED' % (i) 

     s.close() 
if choice == 'c': 
    firstPort = raw_input('Please specify starting Port: ') 
    endPort = raw_input('Please specify ending Port(max 65535): ') 
    endPort = int(endPort) 
    firstPort = int(firstPort) 
    s = socket(AF_INET, SOCK_STREAM) 

    if firstPort in range(0, 65535): 
     if endPort in range(0, 65535): 
      for i in range(firstPort, endPort): 
       result = s.connect_ex((targetIP, i)) 
       if(result == 0) : 
        print 'Port %d: OPEN' % (i) 
       else: 
        print 'Port %d: CLOSED' % (i) 
       s.close() 
     else: 
      print('Error: Ports not in range!!') 
      s.close() 
    else: 
     print('Error:Ports not in range!!') 
     s.close() 

je sais la façon dont j'ai manipulé et converti les ports choisis n'est pas la meilleure option mais j'étais tout à fait sur une course là. Quelle pourrait être la cause possible de ces erreurs?

+1

double possible de [Quelle pourrait être la raison d'une erreur de socket "\ [Errno 9 \] Bad descripteur de fichier"] (http://stackoverflow.com/questions/17207051/quoi-pourrait-être-la-raison-pour-une-erreur-de-socket-errno-9-mauvais-descripteur de fichier) – That1Guy

+0

Cela a vraiment aidé ouais. Mais je ne comprends toujours pas pourquoi c'est le cas, je ne ferme pas le socket immédiatement, il se ferme quand la fonction if atteint la limite de la plage (au moins ce qu'elle est censée faire). – Johnny

Répondre

0

Dans le dernier "pour" vous fermez le socket, mais ne créez pas de nouveau. Réécrire le dernier "pour" cycle que:

for i in range(firstPort, endPort): 
    s = socket(AF_INET, SOCK_STREAM) 
    result = s.connect_ex((targetIP, i)) 
    if(result == 0) : 
     print 'Port %d: OPEN' % (i) 
    else: 
     print 'Port %d: CLOSED' % (i) 
    s.close()