python中的端口扫描程序

时间:2011-04-13 18:09:22

标签: python sockets irc

  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

4 个答案:

答案 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