Python socket调用sendto报TypeError: an integer is required错误如何解决
错误产生原因
input()函数返回的所有用户输入默认都是字符串类型,你代码中定义的port变量实际保存的是字符串格式的端口值socket.sendto()方法要求传入的地址元组里,第二个端口参数必须为整数类型,传入字符串类型的端口就触发了本次类型错误
修复方案
只需要将端口的输入结果转换为整数类型即可,修改后的可运行代码如下:
import socket import time target = input("[+] Target ip: ") # 将输入的端口字符串转为整数 port = int(input("[+] Port: ")) print("[+] Sending package to: > " + target, "<") time.sleep(1) byte_message = bytes("Test", "utf-8") opened_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) opened_socket.sendto(byte_message, (target, port))
如果需要处理用户输入非数字端口的异常情况,可以增加异常捕获逻辑:
import socket import time target = input("[+] Target ip: ") # 增加端口合法性校验 while True: port_str = input("[+] Port: ") try: port = int(port_str) # 额外校验端口范围是合法的1-65535 if 1 <= port <= 65535: break else: print("[-] 端口必须在1-65535范围内,请重新输入") except ValueError: print("[-] 端口必须为数字,请重新输入") print("[+] Sending package to: > " + target, "<") time.sleep(1) byte_message = bytes("Test", "utf-8") opened_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) opened_socket.sendto(byte_message, (target, port))
内容的提问来源于stack exchange,提问作者Titz
相关产品推荐
相关产品推荐

