python中的端口扫描程序

|
  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机器人编写一个小型的portcanner,但我一直收到此错误。
NameError: name \'gethostbyname\' is not defined
    
已邀请:
>>> import socket
>>> socket.gethostbyname(\'localhost\')
\'127.0.0.1\'
如前所述,请确保已导入套接字模块,然后根据执行的方式调用
gethostbyname()
。     
在脚本的顶部,看起来就像您执行的一样:
from socket import *
或“相对”较大的东西,可以直接将
socket
名称引入您的全局命名空间。 您不应该这样做,因为这是一种不好的做法,并且会导致诸如
socket.socket
(类)和
socket
(模块)混淆的问题。从套接字模块导入的所有内容都使您的命名空间陷入混乱,这很多:
>>> import socket
>>> len(socket.__all__)
241
(“ 9”是模块变量,它指定模块的公共名称,并指示当有人在您的模块上执行“ 10”时导出的内容)。 241有很多不同的名称要导入到全局命名空间中(假设是这种情况),它给您带来了很多麻烦,使您可以覆写或意外重用从
socket
导入的变量。     
gethostbyname
应该从某个地方进口吗?尝试
socket.gethostbyname()
,或您导入
socket
的任何东西。     
您可以使用Scapy轻松进行大约2行的端口扫描。您可以将目标的DNS名称直接转储到其中。如果仍然需要目标的IP地址,请记住在调用
socket.gethostbyname
之前导入
socket
。     

要回复问题请先登录注册