Я новичок в программировании на языке python и сокетах и пытается сканировать порт WAN-адреса.чтение из сокета python
Я знаю, используя nmap, что у него порт 80 и 443 открыт.
Почему я не могу прочитать это, чтобы узнать, открыто ли это ??? Кроме того, когда я просматриваю свой шлюз с помощью моей программы, он показывает, что 21 и 23 открыты, что NMAP показывает мне. НО nmap также говорит мне, что у меня порт 80 и 443, но моя программа не забирает их.
Благодаря
def return_banner(ip, port):
try:
socket.setdefaulttimeout(2)
s = socket.socket()
s.connect((ip, port)) #establish connection
banner = s.recv(1024) #receive the first 1024 bytes from socket
return banner
except:
return #will return none
def main():
lan_or_wan()
dictionary_of_open_services = {}
list_of_ports = [20, 21, 22, 23, 25, 80, 8080, 53, 67, 68, 443, 993, 143, 110]
list_of_ports.sort()
if (local == False):
print "local = false"
for port in list_of_ports:
print "scanning: "+WAN_IP+":"+str(port)
software_banner = return_banner(WAN_IP, port)
if (software_banner != None):
dictionary_of_open_services[WAN_IP+":"+str(port)] = software_banner
Учитывая ваш прецедент, вы не должны * обрабатывать таймаут при подключении так же, как и таймаут при чтении: первый может указывать отфильтрованный порт. Позже обозначает открытый порт, связанная служба которого не отправляет баннер. Две совершенно разные вещи. См. Http://stackoverflow.com/questions/2719017/how-to-set-timeout-on-pythons-socket-recv-method для некоторых решений. –
Итак, я должен удалить это socket.setdefaultimeout (2)? –