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()
я знаю то, как я обрабатывал и преобразовывал выбранные порты, - это не самый лучший вариант, но я был там в беге. Какая может быть причина этих ошибок?
возможно дубликат [Что может быть причиной ошибки сокета «\ [Errno 9 \] Плохой дескриптор файла»] (http://stackoverflow.com/questions/17207051/what-could-be-the-reason-for-a-socket-error-errno-9-bad-file-descriptor) – That1Guy
Это очень помогло. Но я все еще не понимаю, почему это происходит, я не закрываю сокет немедленно, он закрывается, когда функция if достигает предела диапазона (по крайней мере, это должно делать). – Johnny