Windows下Python3编写端口扫描器遇TypeError:需整数却传字符串
解决Python TCP端口扫描时的
TypeError: an integer is required错误 从你贴出的报错信息能一眼看出问题所在:你传给s.connect()方法的端口号是字符串类型,但这个方法要求端口必须是整数类型。
大概率你是用input()函数获取的端口号吧?默认情况下input()返回的是字符串值,直接把它丢给connect()就会触发这个类型错误。比如你之前的代码里可能是这样写的:
DstPort = input("Port number: ")
修复方法很简单:
把输入的端口号转换成整数就行,用int()函数包装一下:
DstPort = int(input("Port number: "))
给你一个完整的修正后的示例代码(还加了基础异常处理,避免程序直接崩溃):
import socket def SCAN_TCP_PORT(): DstIP = input("Destination IP Address: ") # 关键:将输入的端口转为整数类型 DstPort = int(input("Port number: ")) print(f"Host {DstIP} port {DstPort}") s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(2) # 可以加个超时,避免长时间等待 try: s.connect((DstIP, DstPort)) print(f"✅ Port {DstPort} is open") s.close() except ConnectionRefusedError: print(f"❌ Port {DstPort} is closed") except socket.timeout: print(f"⏱️ Port {DstPort} connection timed out") except Exception as e: print(f"⚠️ Unexpected error: {str(e)}") SCAN_TCP_PORT()
这样修改后,端口号就变成了整数类型,符合connect()方法的参数要求,就能正常执行端口扫描了。
内容的提问来源于stack exchange,提问作者user9013730
相关产品推荐
相关产品推荐

