编程

当前位置:澳门新莆京娱乐官网 > 编程 > SYN扫描接收不到对方的回应澳门新莆京娱乐官网

SYN扫描接收不到对方的回应澳门新莆京娱乐官网

来源:http://www.drgigabytes.com 作者:澳门新莆京娱乐官网 时间:2019-12-25 16:58

发送自定义包可以成功,但是接收不到对方的回应,用connect扫描可以正确扫描代码如下://申请发送套接字SOCKETsockRaw=socket(AF_INET,SOCK_RAW,IPPROTO_IP);if(sockRaw==INVALID_SOCKET){setErrInfo("申请RowSocket失败",WSAGetLastError());returnFALSE;}//设置套接字选项BOOLbOpt=true;intiTimeOut=1000;setsockopt(sockRaw,IPPROTO_IP,IP_HDRINCL,(char*)bOpt,sizeof(bOpt));setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)iTimeOut,sizeof(iTimeOut));setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)iTimeOut,sizeof(iTimeOut));//绑定本机接收IPsockaddr_inmyAddr;memset(myAddr,0,sizeof(myAddr));myAddr.sin_addr.S_un.S_addr=getLocalIP();myAddr.sin_family=AF_INET;myAddr.sin_port=htons(DEF_LISTEN_澳门新莆京娱乐官网,PORT);if(SOCKET_ERROR==bind(sockRaw,(constsockaddr*)myAddr,sizeof(myAddr))){closesocket(sockRaw);sockRaw=INVALID_SOCKET;setErrInfo("绑定接收套接字失败",WSAGetLastError());returnFALSE;}//设置可以接受所有IPDWORDdwInBuffer=1;charszBuffer[10]={0};DWORDdwBytesReturned=0;if(SOCKET_ERROR==WSAIoctl(sockRaw,SIO_RCVALL,dwInBuffer,sizeof(dwInBuffer),NULL,0,dwBytesReturned,NULL,NULL)){closesocket(sockRaw);sockRaw=INVALID_SOCKET;setErrInfo("WSAIoctl设置出错",WSAGetLastError());returnFALSE;}//设置目的地址sockaddr_indstAddr;memset(dstAddr,0,sizeof(dstAddr));dstAddr.sin_addr.S_un.S_addr=inet_addr(m_dstIP);dstAddr.sin_family=AF_INET;//封装并发送数据包IP_HEADERip_header;TCP_HEADERtcp_header;PSD_HEADERpsd_header;//填充IP首部ip_header.h_lenver=(44|sizeof(ip_header)/sizeof(unsignedlong));//高四位IP版本号,低四位首部长度ip_header.tos=0;ip_header.total_len=htons(sizeof(IP_HEADER)+sizeof(TCP_HEADER));//16位总长度ip_header.ident=1;//16位标识ip_header.frag_and_flags=0;//3位标志位ip_header.ttl=128;//8位生存时间TTLip_header.proto=IPPROTO_TCP;//8位协议(TCP,UDP…)//16位IP首部校验和ip_header.sourceIP=myAddr.sin_addr.S_un.S_addr;//32位源IP地址ip_header.destIP=dstAddr.sin_addr.S_un.S_addr;//32位目的IP地址//填充TCP首部tcp_header.th_sport=htons(DEF_LISTEN_PORT);tcp_header.th_seq=htonl(SEQ);//源端口号tcp_header.th_ack=0;//ACK序列号置为0tcp_header.th_lenres=(sizeof(TCP_HEADER)/44|0);//TCP长度和保留位tcp_header.th_flag=2;//SYN标志,1:FIN,16:ACKtcp_header.th_win=htons(512);tcp_header.th_urp=0;//填充TCP伪首部psd_header.saddr=ip_header.sourceIP;psd_header.daddr=ip_header.destIP;psd_header.mbz=0;psd_header.ptcl=IPPROTO_TCP;psd_header.tcpl=htons(sizeof(tcp_header));//对每一个端口发送一个测试包charsendBuf[128]="";for(DWORDport=m_dwPortBegin;port=m_dwPortEnd;++port){//初始化头部检验和ip_header.checksum=0;tcp_header.th_sum=0;//设置目的端口号tcp_header.th_dport=htons(port);dstAddr.sin_port=htons(port);//计算TCP校验和,计算校验和时需要包括TCPpseudoheadermemcpy(sendBuf,psd_header,sizeof(psd_SYN扫描接收不到对方的回应澳门新莆京娱乐官网。header));memcpy(sendBuf+sizeof(psd_header),tcp_header,sizeof(tcp_header));tcp_header.th_sum=checksum((USHORT*)sendBuf,sizeof(psd_header)+sizeof(tcp_header));//计算IP校验和memcpy(sendBuf,ip_header,sizeof(ip_header));ip_header.checksum=checksum((USHORT*)sendBuf,sizeof(ip_header));//填充发送缓冲区memcpy(sendBuf,ip_header,sizeof(ip_header));memcpy(sendBuf+sizeof(ip_header),tcp_header,sizeof(tcp_header));//发送TCP报文intiRet=sendto(sockRaw,sendBuf,sizeof(ip_header)+sizeof(tcp_header),0,(structsockaddr*)dstAddr,sizeof(dstAddr));if(iRet==SOCKET_ERROR){setErrInfo("发送出错",WSAGetLastError());closesocket(sockRaw);sockRaw=INVALID_SOCKET;returnFALSE;}//接收inttimeout=2000;DWORDstartTime=GetTickCount();intflag=0;charrecvBuffer[65535]="";while(true){if(GetTickCount()-startTimetimeout){break;}intiRet=recv(sockRaw,recvBuffer,65535,0);if(iRet!=SOCKET_ERROR){//解包IP_HEADER*iphdr;TCP_HEADER*tcphdr;unsignedshortiphdrlen;iphdr=(IP_HEADER*)recvBuffer;iphdrlen=sizeof(unsignedlong)*(iphdr-h_lenver0xf);tcphdr=(TCP_HEADER*)(recvBuffer+iphdrlen);//是否来自目标IPif(iphdr-sourceIP!=dstAddr.sin_addr.S_un.S_addr)continue;//是否来自目标端口if(ntohs(tcphdr-th_dport)!=port)continue;//SYN/ACK-扫描到一个端口if(tcphdr-th_flag==18){setPortInfo(port,"listening...");flag=1;break;}else{setPortInfo(port,"free...");flag=1;break;}}}//长时间没有收到对方返回的包if(flag==0){setPortInfo(port,"free...");}}closesocket(sockRaw);

本文由澳门新莆京娱乐官网发布于编程,转载请注明出处:SYN扫描接收不到对方的回应澳门新莆京娱乐官网

关键词:

上一篇:总是报错

下一篇:没有了