由于服务数据的可靠性传输都使用TCP协议,所以探测TCP端口就显得尤为必要。常见的TCP扫描分为几种。
1.全连接探测:根据TCP握手流程,客户端发送TCP SYN包。如果服务器的端口打开,就返回SYN/ACK包,客户端再发送ACK包,结束握手过程。如果服务器端口没打开,则返回RST/ACK。客户端根据返回的包类型,确定端口是否打开。这种方式准确性高,但容易被日志系统记录。
2.SYN探测:为了规避日志系统记录,如果服务器返回SYN/ACK包,客户端返回RST包,中断握手构成。这样,日志系统就不会记录。但现在的防火墙软件都会发现这种扫描。
3.反转TCP探测:为了规避防火墙,客户端故意发送一些错误的包,如标记FIN的TCP包。按照协议规范,服务器端口如果关闭,就应该返回RST/ACK包。通过这个机制,反向确定服务器的端口是否开放。这种技术适用于Linux系统,但不适合Windows系统。因为WIndows没遵守这个规范。
4.ACK探测:这是针对BSD系统实现TCP/IP协议栈的漏洞,设计的一种扫描方式。它触发服务器返回RST包,然后大量对比打开和关闭的端口响应TTL和Window值不同,区分端口的开放。
所以,只要对协议工作机制和实现模式了解足够多,自己写个工具真的不难,尤其是利用Python的scapy模块。
1.全连接探测:根据TCP握手流程,客户端发送TCP SYN包。如果服务器的端口打开,就返回SYN/ACK包,客户端再发送ACK包,结束握手过程。如果服务器端口没打开,则返回RST/ACK。客户端根据返回的包类型,确定端口是否打开。这种方式准确性高,但容易被日志系统记录。
2.SYN探测:为了规避日志系统记录,如果服务器返回SYN/ACK包,客户端返回RST包,中断握手构成。这样,日志系统就不会记录。但现在的防火墙软件都会发现这种扫描。
3.反转TCP探测:为了规避防火墙,客户端故意发送一些错误的包,如标记FIN的TCP包。按照协议规范,服务器端口如果关闭,就应该返回RST/ACK包。通过这个机制,反向确定服务器的端口是否开放。这种技术适用于Linux系统,但不适合Windows系统。因为WIndows没遵守这个规范。
4.ACK探测:这是针对BSD系统实现TCP/IP协议栈的漏洞,设计的一种扫描方式。它触发服务器返回RST包,然后大量对比打开和关闭的端口响应TTL和Window值不同,区分端口的开放。
所以,只要对协议工作机制和实现模式了解足够多,自己写个工具真的不难,尤其是利用Python的scapy模块。