Python

2015-08-17 3 views
0

сканер портов Я пишу небольшой скрипт для сканирования хоста для определенного диапазона портов по выбору и побежал в некоторые странные ошибки при попытке проверить свой диапазон:Python

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() 

я знаю то, как я обрабатывал и преобразовывал выбранные порты, - это не самый лучший вариант, но я был там в беге. Какая может быть причина этих ошибок?

+1

возможно дубликат [Что может быть причиной ошибки сокета «\ [Errno 9 \] Плохой дескриптор файла»] (http://stackoverflow.com/questions/17207051/what-could-be-the-reason-for-a-socket-error-errno-9-bad-file-descriptor) – That1Guy

+0

Это очень помогло. Но я все еще не понимаю, почему это происходит, я не закрываю сокет немедленно, он закрывается, когда функция if достигает предела диапазона (по крайней мере, это должно делать). – Johnny

ответ

0

В последнем «для» вы закрываете сокет, но не создаете новый. Перепишите последний «для» цикла как:

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() 

 Смежные вопросы

  • Нет связанных вопросов^_^