Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 端口扫描程序需要tuple not str_Python_Port - Fatal编程技术网

Python 端口扫描程序需要tuple not str

Python 端口扫描程序需要tuple not str,python,port,Python,Port,好的,所以基本上我决定尝试建立一个基本的端口扫描仪。这是我的密码: (上面还有更多内容,但感觉粘贴在这里太多了) 在我看来这没什么问题,但当我运行它时,我收到一个错误“AF_INET address必须是tuple,而不是str”,我不确定问题出在哪一部分?抛出错误的是我的默认端口字符串吗?还是我的ip地址格式有问题??我尝试了我的一些设备的ip地址,但总是得到相同的错误。我想不是 # abbreviated default_list = "21, 22, 23, 24, 25, 80, 11

好的,所以基本上我决定尝试建立一个基本的端口扫描仪。这是我的密码:

(上面还有更多内容,但感觉粘贴在这里太多了)

在我看来这没什么问题,但当我运行它时,我收到一个错误“AF_INET address必须是tuple,而不是str”,我不确定问题出在哪一部分?抛出错误的是我的默认端口字符串吗?还是我的ip地址格式有问题??我尝试了我的一些设备的ip地址,但总是得到相同的错误。

我想不是

# abbreviated 
default_list = "21, 22, 23, 24, 25, 80, 110, 135, 139"
...
if menu2 == "1":
    port_list='default_list'
你的意思是:

default_list = (21, 22, 23, 24, 25, 80, 110, 135, 139)
...
if menu2 == "1":
    port_list = default_list
最后,不要在字符串的字符上循环:

for i in str(port_list):
    # do something
我想您应该反复查看端口号列表:

for port in port_list:
    # do something
我想不是

# abbreviated 
default_list = "21, 22, 23, 24, 25, 80, 110, 135, 139"
...
if menu2 == "1":
    port_list='default_list'
你的意思是:

default_list = (21, 22, 23, 24, 25, 80, 110, 135, 139)
...
if menu2 == "1":
    port_list = default_list
最后,不要在字符串的字符上循环:

for i in str(port_list):
    # do something
我想您应该反复查看端口号列表:

for port in port_list:
    # do something
从:

一对(主机、端口)用于AF_INET address系列,其中主机是一个字符串,表示Internet域表示法中的主机名,如'darin.cwi.nl',或IPv4地址,如'100.50.200.5',端口是一个整数

因此,假设您的
ip
变量是ip地址,如“100.50.200.5”,并且
i
是带有端口号的整数,那么您的连接代码应该如下所示

result = connection.connect_ex((ip, i))
但是,看起来您的循环在port_list变量上进行交互,该变量是一个字符串。要使其工作,您需要将此字符串(例如“22,23”)转换为整数列表([22,23])

例如,您可以像这样重写代码:

##Print port menu
print "-"*60
print "Specify ports"
print "-"*60
print """
1)Use default list
2)Specify your own port list\n"""
print"-"*60
menu2=raw_input("Please choose an option\n")
##Define default port list
default_list="21, 22,23, 24, 25, 80, 110, 135, 139, 443, 445, 553, 3306, 3389, 8080"

##Set port list to default if option "1" is chosen
if menu2 == "1":
    port_list = default_list

##Request user port list if option "2" is chosen
if menu2 == "2":
    port_list = raw_input("Please enter the ports you would like scanned.\neg. 22, 23\n")

print "Ok, here we go"

port_list = [int(port.strip()) for port in port_list.split(',')]

for port in port_list:
    connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    results = connection.connect_ex((ip, port))
从:

一对(主机、端口)用于AF_INET address系列,其中主机是一个字符串,表示Internet域表示法中的主机名,如'darin.cwi.nl',或IPv4地址,如'100.50.200.5',端口是一个整数

因此,假设您的
ip
变量是ip地址,如“100.50.200.5”,并且
i
是带有端口号的整数,那么您的连接代码应该如下所示

result = connection.connect_ex((ip, i))
但是,看起来您的循环在port_list变量上进行交互,该变量是一个字符串。要使其工作,您需要将此字符串(例如“22,23”)转换为整数列表([22,23])

例如,您可以像这样重写代码:

##Print port menu
print "-"*60
print "Specify ports"
print "-"*60
print """
1)Use default list
2)Specify your own port list\n"""
print"-"*60
menu2=raw_input("Please choose an option\n")
##Define default port list
default_list="21, 22,23, 24, 25, 80, 110, 135, 139, 443, 445, 553, 3306, 3389, 8080"

##Set port list to default if option "1" is chosen
if menu2 == "1":
    port_list = default_list

##Request user port list if option "2" is chosen
if menu2 == "2":
    port_list = raw_input("Please enter the ports you would like scanned.\neg. 22, 23\n")

print "Ok, here we go"

port_list = [int(port.strip()) for port in port_list.split(',')]

for port in port_list:
    connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    results = connection.connect_ex((ip, port))

尝试将字符串作为AF_INET地址传递的部分?这将是
connect\u ex
调用。你查过文档了吗?我想肯定还不够lol。我现在就这么做。好吧,现在可以了,但现在我回到了我的原始错误,即“connect_ex()只接受一个参数(给定2个)”,但是我需要它能够使用ip地址和端口,我如何将它合并成一个参数??而不是一根绳子?因为它是。。。tuple:)尝试将字符串作为AF_INET地址传递的部分?这将是
connect\u ex
调用。你查过文档了吗?我想肯定还不够lol。我现在就这么做。好吧,现在可以了,但现在我回到了我的原始错误,即“connect_ex()只接受一个参数(给定2个)”,但是我需要它能够使用ip地址和端口,我如何将它合并成一个参数??而不是一根绳子?因为它是。。。塔普尔:)太棒了!非常感谢你的帮助!在进一步尝试之前,我会多阅读一些官方文件,然后再尝试你的建议。再次感谢!令人惊叹的!非常感谢你的帮助!在进一步尝试之前,我会多阅读一些官方文件,然后再尝试你的建议。再次感谢!