You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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版本不兼容,结合代码细节,修复步骤如下:

  1. 统一print语法
    Python3中print是函数,必须添加括号,将两处print语句修改为:
print("Port %d is closed" % (port))
print("Port %d is opened" % (port))
  1. 指定Python3执行脚本
    Kali默认/usr/bin/python指向Python2,将脚本开头的shebang改为:
#! /usr/bin/python3

确保系统用Python3执行脚本,彻底规避版本语法差异。

  1. 修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 13:40:27