连接网络设备时,一般都会在网络设备端选取0-65535之间的一个端口进行连接,端口扫描是指:检查网络设备上0-65535号端口哪些端口是开启状态。如果黑客扫描到某网络设备的80端口是开启状态,那么很有可能是web服务,此时黑客会使用一些手段攻击web服务器,这样一来,端口扫描会增加服务器的安全负担,因此一般网络都会阻止端口扫描。当然端口扫描对于防御性渗透测试也非常有用。我们可以扫描自己的系统来确定哪些服务暴露给了网络,这样我们就能有针对性的对系统的配置进行检查。本节属于解释的是端口扫描的原理。
一、TCP扫描
使用socket创建套接字,利用三次握手协议来判断目标端口是否存活。
原理:
1、扫描端向目标端发送SYN请求建立连接 2、目标端收到请求后,回复ACK同意连接并同意发送SYN请求建立连接 3、扫描端收到后,发送ACK同意,此时三次握手完成,以此来判断端口是否存活
TCP扫描的python实现过程
importtime importsocket out_time=1 deftcp_scan(ip,port): try: s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #建立socket连接,TCP协议 s.settimeout(out_time) #设置超时时间 c=s.connect_ex((ip,port)) #与目标端建立连接,成功但会 0 ifc==0: print("%s:%sopen!"%(ip,port)) exceptExceptionase: print(e) s.close() s_time=time.time() ip="10.32.1.238" #目标机ip foriinrange(20,50): #扫描端口的范围 tcp_scan(ip,i) e_time=time.time() print(e_time-s_time)
二、SYN扫描
为针对TCP扫描,目前有种防御方式:若发现网络中的某台设备进行了端口扫描,会将其加入黑名单。实现这种防御的原理是:每次TCP连接后会将信息记录到日志中,当发现某IP多次连接设备的不同端口,就可以判断是TCP扫描,此时就可以将此IP加入黑名单。
为避免被TCP扫描抓到,诞生了SYN扫描,原理同样是利用了TCP三次握手。
原理:
1、扫描端向目标端发送SYN请求建立连接 2、目标端收到请求后,回复ACK同意连接并同意发送SYN请求建立连接 3、扫描端收到后,发送RST拒绝建立连接。
与TCP扫描不用的是,当扫描端收到ACK/SYN应答时,发送了一条拒绝建立连接的RST请求,此时三次握手建立失败,因此目标端就不会将其记录在日志中,但同时也扫描到了端口信息。与TCP扫描相比更加隐蔽。
三、扫描工具
被称为扫描之王的nmap工具是一款极强的端口扫描工具,支持linux和windows系统,具体优势如下:
1、多种多样的参数,丰富的脚本库,满足用户的个人定制需求,其中脚本库还提供了很多强大的功能任你选择
2、强大的可移植性,基本上能在所有的主流系统上运行,而且代码是开源的
3、详细的文档说明,和强大的社区团队进行支持,方面新人上手
使用方法可参考:https://www.cnblogs.com/nmap/p/6232207.html