сканер портов в питоне - PullRequest
       41

сканер портов в питоне

1 голос
/ 13 апреля 2011
  if data.find('!scan') != -1:
     nick = data.split('!')[ 0 ].replace(':','')
     targetip = gethostbyname(arg)
     sck.send('PRIVMSG ' + chan + " :" ' scanning host' + targetip + '\r\n')
     for i in range(20, 1025):
         s = socket(AF_INET, SOCK_STREAM)
         result = s.connect_ex((targetip, i))
         if (result == 0) :
              s.send('PRIVMSG ' + chan + " :" 'port %d: OPEN' % (i,) + '\r\n')
         s.close()

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

NameError: name 'gethostbyname' is not defined

Ответы [ 4 ]

3 голосов
/ 13 апреля 2011
>>> import socket
>>> socket.gethostbyname('localhost')
'127.0.0.1'

Как уже упоминалось, убедитесь, что вы импортировали модуль сокета, и в зависимости от того, как вы это сделали, вы можете вызвать gethostbyname().

1 голос
/ 13 апреля 2011

В верхней части вашего скрипта выглядит, как вы выполнили:

from socket import *

Или что-то "относительно" большое, которое приносит socket имен непосредственно в ваше глобальное пространство имен.

Вы не должны этого делать, потому что это плохая практика и вызывает такие проблемы, как та, с которой вы сталкиваетесь, когда вы путаете socket.socket (класс) с socket (модуль). Ваше пространство имен запуталось со всем, что импортируется из модуля сокетов, а это много:

>>> import socket
>>> len(socket.__all__)
241

(__all__ - переменная модуля, которая задает публичные имена для модуля и определяет, что экспортируется, когда кто-то выполняет from x import * на вашем модуле).

241 - это множество различных имен, которые нужно импортировать в глобальное пространство имен (при условии, что это так), и дает вам множество веревок, с помощью которых можно повеситься, вплоть до перезаписи или случайного повторного использования переменных, которые были импортированы из socket.

0 голосов
/ 13 апреля 2011

Сканирование портов довольно легко выполняется примерно в 2 строки с помощью Scapy . Вы можете записать DNS-имя вашей цели прямо в нее. Если вам все еще нужен IP-адрес цели, не забудьте импортировать socket перед вызовом socket.gethostbyname.

0 голосов
/ 13 апреля 2011

gethostbyname откуда-нибудь импортировать? Попробуйте socket.gethostbyname() или все, что вы импортировали socket как.

...