如何返回验证端口扫描的套接字状态



作为安全测试的一部分,我正在开发一个脚本,用于检查主机中连接的端口并返回0状态是否为true(如果它连接到端口)否则返回一些错误代码..所以我需要在下面的代码中包含该条件,在result ==应该返回连接的端口的def getPort_on_host()

。如果有人能在这里帮助我,那就太好了......

import socket
class A:
s= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
def getAddress():
host= raw_input("Enter the Host name :" )
result = s.gethostbyname(host)
return result
def getPort_on_host():
portlist =[20,23,80,912,135,445,20]
for port in portlist:
result = s.connect_ex((getAddress,port))
if result ==""
print result
return port
s.close()
def getService():
status = s.getserverbyport(getPOrt_on_host)
print status

几个注意事项 - 注意你的缩进。函数的级别都必须缩进到函数之后,否则它将无法工作。 条件语句也是如此:forifelse等都需要在它们下面有一个缩进级别。所有这些陈述都需要 他们后面还有一个冒号。

接下来,似乎您可能尝试将s作为实例变量传递(即全局传递给类),这意味着您应该 用self.表示。如果继续使用类结构,则还应创建一个__init__方法。 您还需要在所有方法中将其作为参数传递。另请注意,如果您使用return在 Python 函数中,它不会执行低于该值的代码。在这里,您的s.close()是无法访问的。

传递方法时,如果要传递方法对象本身,可以调用方法名称。如果你愿意 传递函数返回的值,您需要在方法名称中添加括号,即result = self.s.connect_ex((self.getAddress(),port))

我看到当您需要在套接字接口本身上调用gethostbyname时,您正在调用套接字对象上的。 您应该转换其他变量上的主机名,然后在 socket 对象上调用connect_ex

请注意,在该for循环中,您每次都会传递函数。因此,它每次都会要求输入主机名。

这是一个更新的版本,可让您更接近需要的地方。请注意,打开主机并测试每个套接字需要一些时间 打印主机的时间:

import socket
class A:
def __init__(self):
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def getAddress(self):
newSocketobj = socket
host = raw_input("Enter the Host name :" )
result = newSocketobj.gethostbyname(host)
print result
return result
def getPort_on_host(self):
portlist =[20,23,80,912,135,445,20]
hostname = self.getAddress()
for port in portlist:
status = self.s.connect_ex((hostname,port))
print status 
self.s.close()
#return port
def getService(self):
status = self.s.getserverbyport(self.getPort_on_host)
print status
newTest = A()
newTest.getPort_on_host()

最新更新