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机器人编写一个小型portscanner,我一直收到这个错误。
NameError: name 'gethostbyname' is not defined
答案 0 :(得分:3)
>>> import socket
>>> socket.gethostbyname('localhost')
'127.0.0.1'
如上所述,请确保您已导入套接字模块,根据您的操作方式,您可以拨打gethostbyname()
。
答案 1 :(得分:1)
在您的脚本顶部,看起来就像您执行的那样:
from socket import *
或者“相对”大的东西会将socket
名称直接带入您的全局命名空间。
你不应该这样做,因为这是不好的做法,并导致你遇到的问题,例如socket.socket
(班级)与socket
(模块)混淆的问题。您的命名空间已经变得混乱了从套接字模块导入的所有东西,这很多:
>>> import socket
>>> len(socket.__all__)
241
(__all__
是模块变量,它指定模块的公共名称,并指示当某人在您的模块上执行from x import *
时导出的内容。
241是要导入全局命名空间的许多不同的名称(假设是这种情况),并且为了覆盖或意外重用从{{1}导入的变量而给自己挂起了很多绳索。 }。
答案 2 :(得分:0)
gethostbyname
应该从某个地方导入?请尝试使用socket.gethostbyname()
或您导入的任何内容socket
。
答案 3 :(得分:0)
您可以使用Scapy在大约2行中轻松进行端口扫描。您可以直接将目标的DNS名称转储到其中。如果您仍然需要目标的IP地址,请记得在致电socket.gethostbyname
之前导入socket
。