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

Python 如何返回用于验证端口扫描的套接字状态,python,Python,作为安全测试的一部分,我正在开发一个脚本,用于检查主机中连接的端口,如果状态为true(如果连接到端口),则返回0,否则返回一些错误代码。。因此,我需要在以下代码中的主机()上的def getPort\u下包含该条件,result==应该返回连接的端口 如果有人能帮我,那就太好了 import socket class A: s= socket.socket(socket.AF_INET,socket.SOCK_STREAM) def getAddress(): h

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

如果有人能帮我,那就太好了

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

注意你的缩进。所有函数的级别都必须缩进到函数后面,否则它将不起作用。 条件语句也一样:
for
if
else
等。所有语句都需要在其下方有一个缩进级别。所有这些声明都需要 后面还有一个冒号

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

传递方法时,如果希望传递方法对象本身,则调用方法名称是可以的。如果你想 传递函数返回的值,您需要在方法名称中添加括号,即
result=self.s.connect\u ex((self.getAddress(),port))

我看到,当您需要在套接字接口本身上调用时,您正在套接字对象上调用
gethostbyname
。 您应该在另一个变量上转换主机名,然后在之后调用套接字对象上的
connect\u 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()

注意你的缩进。所有函数的级别都必须缩进到函数后面,否则它将不起作用。 条件语句也一样:
for
if
else
等。所有语句都需要在其下方有一个缩进级别。所有这些声明都需要 后面还有一个冒号

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

传递方法时,如果希望传递方法对象本身,则调用方法名称是可以的。如果你想 传递函数返回的值,您需要在方法名称中添加括号,即
result=self.s.connect\u ex((self.getAddress(),port))

我看到,当您需要在套接字接口本身上调用时,您正在套接字对象上调用
gethostbyname
。 您应该在另一个变量上转换主机名,然后在之后调用套接字对象上的
connect\u 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()

你好,佳士93。。我刚刚更新了代码,但在主机上的newTest.getPort_()文件“portscanner.py”的第18行getPort_上的getPort_result=self.connect_ex((主机名,端口))AttributeError:实例没有“connect_ex”属性。我不确定这些问题。。谢谢,您是通过属性而不是套接字调用的
connect\u ex
。请记住,我们将套接字定义为
self.s
,因此您必须对其调用方法。行应该是:
self.s.connect\u ex((主机名,端口))
如果您不确定如何调用对象上的方法或属性是什么,我强烈建议您阅读Hi Jiash93。。我刚刚更新了代码,但在主机上的newTest.getPort_()文件“portscanner.py”的第18行getPort_上的getPort_result=self.connect_ex((主机名,端口))AttributeError:实例没有“connect_ex”属性。我不确定这些问题。。谢谢,您是通过属性而不是套接字调用的
connect\u ex
。请记住,我们将套接字定义为
self.s
,因此您必须对其调用方法。行应该是:
self.s.connect\u ex((主机名,端口))
如果您不确定如何调用对象上的方法或属性是什么,我强烈建议您阅读