Python基础端口扫描脚本运行报print语法错误求助
问题描述
本人熟悉Python,但因担任高级管理岗位多年未使用,脚本技能已生疏。运行基础端口扫描脚本时出现print语法错误,按提示添加括号后仍未解决,附上报错信息及代码:
报错信息
File "/home/kali/pythonprograms/scanning/./portscan1.py", line 12
print "Port %d is closed" % (port)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?
原代码
#! /usr/bin/python import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = "10.10.1.23" port = 443 def portscanner(port): if sock.connect_ex((host,port)): print "Port %d is closed" % (port) else: print "Port %d is opened" % (port) portscanner(port)
解决方案
问题核心是Python版本不兼容,结合代码细节,修复步骤如下:
- 统一
print语法
Python3中print是函数,必须添加括号,将两处print语句修改为:
print("Port %d is closed" % (port)) print("Port %d is opened" % (port))
- 指定Python3执行脚本
Kali默认/usr/bin/python指向Python2,将脚本开头的shebang改为:
#! /usr/bin/python3
确保系统用Python3执行脚本,彻底规避版本语法差异。
- 修复Socket复用问题
原代码中sock是全局变量,一次连接后状态会保留,后续扫描可能出错。将sock的创建移到函数内部,并在使用后关闭:
def portscanner(port): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) if sock.connect_ex((host,port)): print("Port %d is closed" % (port)) else: print("Port %d is opened" % (port)) sock.close()
最终完整代码
#! /usr/bin/python3 import socket host = "10.10.1.23" port = 443 def portscanner(port): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) if sock.connect_ex((host, port)): print("Port %d is closed" % (port)) else: print("Port %d is opened" % (port)) sock.close() portscanner(port)
内容的提问来源于stack exchange,提问作者tizzle
相关产品推荐
相关产品推荐

