连接网络设备时,一般都会在网络设备端选取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

版权声明:本文为zqj-blog原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zqj-blog/p/10497251.html