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

Python端口扫描器输出多余None,如何消除该问题?

解决Python端口扫描器输出多余“None”的问题

你提到运行一款从CSV读取设备的Python端口扫描器时,功能正常但每次输出结果后都会打印None,先看你给出的输出示例:

10.38.0.45 - Port 22: OK
None
10.38.0.46 - Port 22: OK
None
10.38.0.47 - Port 22: OK
None

结合你贴出的代码,我很快找到了问题所在——问题出在你调用check函数的方式上,和check函数内部的扫描逻辑无关。

原因分析

你的check函数内部已经通过print()语句输出了端口检测结果,但这个函数没有定义任何return语句。在Python中,没有返回值的函数会默认返回None。如果你的主程序(读取CSV的部分你没贴出来)是类似这样调用的:

# 错误的调用示例(读取CSV后循环调用)
for row in csv_reader:
    print(check(row['ip'], row['port']))

这里外层的print()会把check函数的返回值(也就是默认的None)打印出来,这就是你看到的多余输出。

修复方法

只需要去掉调用check函数时外层的print(),直接调用函数即可:

# 正确的调用方式
for row in csv_reader:
    check(row['ip'], row['port'])

这样check函数内部的print()会正常输出扫描结果,不会额外打印None。

小优化建议(可选)

看你的代码里portlist1和portlist2都只包含一个端口,其实可以去掉循环,直接检测对应端口,让代码更简洁。比如针对22端口的部分可以改成:

if port == '22':
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(3)
        result = sock.connect_ex((remote_server_ip, 22))
        if result == 0:
            print(f'\n{remote_server_ip} - Port 22: OK\n')
        else:
            print(f'\n{remote_server_ip} - Not able to connect on Port 22:\n')
        sock.close()
    # 异常处理部分保持不变
    except KeyboardInterrupt:
        print("You pressed Ctrl+C")
        sys.exit()
    # ... 其他异常处理

不过这部分不影响当前的None问题,只是让代码更高效~

内容的提问来源于stack exchange,提问作者Gustavo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:13:09