|
由于现在一些防火墙对ICMP进行控制,所以,实际上用ping来做判断已经非常不可靠了。即使是个人防火墙,你也Ping不进去了。 当然,我们有更多探测的方式,我们可以不使用ICMP协议,而使用更普通的TCP协议来进行探测,而且进行对方开放端口的扫描。普通的TCP探测是直接用connect()进行的,但是,在对方有防火墙情况下,Connect() 探测得出的结果也是不能确信的,如果熟悉更多关于TCP/IP协议的内容,我们就可以通过TCP/IP协议的特点尽可能地绕过防火墙。这就是大家所说得半开式扫描,其原理也就是不直接使用Connect进行对方端口得连接,而是发送TCP的标志位来实现,而且这样根本就不用同目标主机进行实际的连接。 在X-Scanner也有使用SYN探测的一项,也就是通过下面这些原理来做的。
SYN PING SYN位表示一个TCP连接的开始,也就是三次握手的第一步,向远端主机某端口发送一个只有SYN标志位的TCP数据报,如果主机反馈一个SYN || ACK数据包,那么,这个主机正在监听该端口,如果反馈的是RST数据包,说明,主机没有监听该端口。
ACK PING 在三次握手中,ACK来表示确认握手过程,但是,如果根本没有进行SYN的请求,而去确认连接,目标主机就会认为一个错误发生了,而发送RST位来中断会话。发送一个只有ACK标志的TCP数据报给主机,如果主机反馈一个TCP RST数据报来,那么这个主机是存在的。ACK探测更容易通过一些 stateless型的防火墙。
FIN ping 因为FIN标志表示一个结束,但是目标主机根本就没有这个连接记录,所以,根据TCP/IP协议,目标主机就要发送一个RST标志的数据包来中断这个会话。对某端口发送一个TCP FIN数据报给远端主机,如果主机没有任何反馈,那么这个主机是存在的,而且正在监听这个端口;主机反馈一个TCP RST回来,那么说明该主机是存在的,但是没有监听这个端口。
NULL Ping 即发送一个没有任何标志位的TCP包,根据RFC793,如果目标主机的相应端口是关闭的话,应该发送回一个RST数据包。
后两种办法可以绕过一些防火墙,而得到防火墙后面的主机信息。即使在ICMP包被过滤的情况下,一般TCP探测还是能够成功的。当然,是在不被欺骗的情况下的。
下面这段程序就是一个TCP/IP半开探测的例子,当然,并没有做得完美,因为没有接收部分,而在WIN2000下实际就是一个选择性的SNIFFER,呵呵,大家可以使用其他的SNIFFER来实现同样的目的。
#include #include #include
#define SOURCE_PORT 7234 #define MAX_RECEIVEBYTE 255
typedef struct ip_hdr //定义IP首部 { unsigned char h_verlen; //4位首部长度,4位IP版本号 unsigned char tos; //8位服务类型TOS unsigned short total_len; //16位总长度(字节) unsigned short ident; //16位标识 unsigned short frag_and_flags; //3位标志位 unsigned char ttl; //8位生存时间 TTL unsigned char proto; //8位协议 (TCP, UDP 或其他) unsigned short checksum; //16位IP首部校验和 unsigned int sourceIP; //32位源IP地址 unsigned int destIP; //32位目的IP地址 }IPHEADER;
typedef struct tsd_hdr //定义TCP伪首部 { unsigned long saddr; //源地址 unsigned long daddr; //目的地址 char mbz; char ptcl; //协议类型 unsigned short tcpl; //TCP长度 }PSDHEADER;
typedef struct tcp_hdr //定义TCP首部 { USHORT th_sport; //16位源端口 USHORT th_dport; //16位目的端口 unsigned int th_seq; //32位序列号 unsigned int th_ack; //32位确认号 unsigned char th_lenres; //4位首部长度/6位保留字 unsigned char th_flag; //6位标志位 USHORT th_win; //16位窗口大小 USHORT th_sum; //16位校验和 USHORT th_urp; //16位紧急数据偏移量 }TCPHEADER;
上一页 [1] [2] [3] [4] [5] [6] 下一页 |