本章节面向有socket网络编程基础的同学。提炼,回顾为主 详细知识点参考
网络编程专栏:https://blog.csdn.net/qq_37615098/category_9368114.html
工具设计需求
功能点:输入一个ip地址,获取对应机器开放的端口 版本:v1.0
socket编程实战
端口扫描的原理
端口扫描原理:尝试与目标主机建立连接,如果目标主机有回复则说明端口开放。
如果把服务器比作房子,端口就是这个房子里面的门。就是看房子里面哪些门是开的哪些是没有开的
安全级别比较高的应用,是指定ip去访问端口的
设计方案规划
1.建立TCP连接
2.查看连接返回
3.判断连接返回值
4.循环扫描剩余端口
代码实现功能
端口开着的,是返回0。端口没有看的话,就返回其他的数字(如:10035)
---------------------v1.0-------------------------
版本一:
import socket
def scan_tool_v1():
# 使用ip实现tcp连接
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sk.settimeout(0.5) # 设置连接超时
# 2.接受用户要扫描的ip,port
ip = input("请输入要扫描的ip>>> ").strip()
port = int(input("请输入要扫描的port>>> ").strip())
# 访问成功,是有返回值0
try:
conn = sk.connect_ex((ip, port)) # 有返回值
if conn == 0:
print("主机:{},端口:{}已开放".format(ip, port))
else:
print("主机:{},端口:{}未开放".format(ip, port))
sk.close()
except:
pass
if __name__ == '__main__':
scan_tool_v1()
# 结果
# 请输入要扫描的ip>>> 192.168.3.xxx
# 请输入要扫描的ip>>> 3306
# 主机:192.168.3.xxx,端口:3306已开放
反馈: