亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tcpsynscan.cpp

?? “網絡安全技術實踐與代碼詳解”實例代碼
?? CPP
字號:
#include   <winsock2.h>   
#include   <ws2tcpip.h>   
#include   <stdio.h>   

#include   <time.h>   
#include   "mstcpip.h"   
#pragma   comment(lib,"ws2_32.lib")   
#define   SEQ   0x27456737   // 偽造的序列號

SOCKET   sockRaw;      // 發送SYN掃描數據包套接字
SOCKET   sockListen;   // 監聽目標主機返回數據包套接字
struct   sockaddr_in   targethost;  // 目標主機地址結構
BOOL     ScanFIN=FALSE;    // 是否掃描完畢
char     TargetIP[20];     // 目標機IP地址
int      TargetPort;       // 目標機起始端口
int      TargetPortEnd;    // 目標機結束端口
int      ProgressTag=0;    // 進度條標志位  


// 定義IP首部格式
typedef   struct   _iphdr     
{   
	unsigned   char   h_lenver;     //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地址   
}IP_HEADER;   

//定義TCP首部格式
typedef   struct   _tcphdr     
{   
	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位緊急數據偏移量   
}TCP_HEADER;     

// 定義TCP偽首部格式 
struct     
{   
	unsigned   long   saddr;   //源地址   
	unsigned   long   daddr;   //目的地址   
	char   mbz;   
	char   ptcl;   //協議類型   
	unsigned   short   tcpl;   //TCP長度   
}psd_header;   

void   usage(void)   
{    
	printf("\tusage:     TCPSYNScan   [IP | DomainName]   [StartPort-EndPort] \n");   
	printf("\tExample:   TCPSYNScan   www.sohu.com   1-139\n");   
	printf("\tExample:   TCPSYNScan   192.168.0.1   1-1024\n");   
}   

void ParseCmd(int argc,char **argv)
{
	char   *p;   
	if(argc!=3)   
	{   
		usage();   
		ExitProcess(-1);
	}   
    // 提取端口參數
	p=argv[2]; 
	if(strstr(argv[2],"-"))   
	{         TargetPort=atoi(argv[2]);   
	for(;*p;)   
		if(*(p++)=='-')
		{
			break;
		}
		TargetPortEnd=atoi(p);   
		
		if(TargetPort<1   ||   TargetPortEnd>65535)   
		{         
			printf("端口范圍錯誤(1-65535) !\n");   
			ExitProcess(-1);   
		}   
		
	}
	// 設置目標機IP地址
    strcpy(TargetIP,argv[1]);   
}

//SOCK錯誤處理程序   
void   CheckSockError(int   iErrorCode,   char   *pErrorMsg)   
{   
	if(iErrorCode==SOCKET_ERROR)   
	{   
		printf("%s   Error:%d\n",   pErrorMsg,   GetLastError());   
		closesocket(sockRaw);   
		ExitProcess(-1);   
	}       
}   

//計算檢驗和   
USHORT   checksum(USHORT   *buffer,   int   size)     
{   
	unsigned   long   cksum=0;   
	while   (size   >   1)     
	{   
		cksum   +=   *buffer++;   
		size   -=   sizeof(USHORT);   
	}   
	if   (size)     
	{   
		cksum   +=   *(UCHAR*)buffer;   
	}   
	cksum   =   (cksum   >>   16)   +   (cksum   &   0xffff);   
	cksum   +=   (cksum   >>16);   
	return   (USHORT)(~cksum);   
}   

//IP解包程序   
bool   DecodeIPPack(char   *buf,   int   bytes)   
{   
	IP_HEADER   *iphdr;   
	TCP_HEADER   *tcphdr;   
	unsigned   short   iphdrlen;   
	iphdr   =   (IP_HEADER   *)buf;   
	iphdrlen   =   sizeof(unsigned   long)   *   (iphdr->h_lenver   &   0xf);   
	tcphdr   =   (TCP_HEADER*)(buf   +   iphdrlen);   
	//是否來自目標IP   
	if(iphdr->sourceIP   !=   targethost.sin_addr.s_addr)
	{
		return  false;
	}
	//序列號是否正確   
	if((ntohl(tcphdr->th_ack)   !=   (SEQ+1))   &&   (ntohl(tcphdr->th_ack)   !=   SEQ))
	{
		return   false;
	}
	// 18表示 SYN/ACK
	if(tcphdr   ->th_flag   ==   18)   
	{   
		printf("端口 %5d  開放!   \n",ntohs(tcphdr->th_sport));   
		return   true;   
	}     
	return   true;   
}   





//接收數據包線程函數  
DWORD   WINAPI   RecvThread(LPVOID   para)
{   
	int   iErrorCode;   
	struct   hostent   *hp;   
	char   RecvBuf[65535]={0};   
	sockListen   =   socket(AF_INET, SOCK_RAW, IPPROTO_IP);   
	CheckSockError(sockListen,   "socket");   
    
	//設置IP頭操作選項   
	BOOL   bOpt   =   true;   
	iErrorCode   =   setsockopt(sockRaw,IPPROTO_IP,IP_HDRINCL,(char   *)&bOpt,sizeof(bOpt));   
	CheckSockError(iErrorCode,   "setsockopt()");     
    
	//獲得本地IP   
	SOCKADDR_IN   sa;   
	unsigned   char   LocalName[256];   
    // 獲取主機信息
	iErrorCode   =   gethostname((char*)LocalName,sizeof(LocalName)-1);   
	CheckSockError(iErrorCode,   "gethostname()");   
	if((hp   =   gethostbyname((char*)LocalName))   ==   NULL)   
	{   
		CheckSockError(SOCKET_ERROR,   "gethostbyname()");   
	}   
	memcpy(&sa.sin_addr.S_un.S_addr,hp->h_addr_list[0],hp->h_length);   
	sa.sin_family   =   AF_INET;   
	sa.sin_port   =   htons(7000);   
	iErrorCode   =   bind(sockListen,   (PSOCKADDR)&sa,   sizeof(sa));   
	CheckSockError(iErrorCode,   "bind");   
    
	//設置SOCK_RAW為SIO_RCVALL,以便接收所有的IP包   
	DWORD   dwBufferLen[10]   ;   
	DWORD   dwBufferInLen   =   1   ;     
	DWORD   dwBytesReturned   =   0   ;
	// 設置套接字接收全部數據包
	iErrorCode=WSAIoctl(sockListen, SIO_RCVALL,
		&dwBufferInLen, sizeof(dwBufferInLen),
		&dwBufferLen, sizeof(dwBufferLen),
		&dwBytesReturned , NULL , NULL   );   
	CheckSockError(iErrorCode,   "Ioctl");   
	memset(RecvBuf, 0, sizeof(RecvBuf));   
	//接收數據   
	for(;;)   
	{   
		
		iErrorCode   =   recv(sockListen,   RecvBuf,   sizeof(RecvBuf),   0);    
		DecodeIPPack(RecvBuf,iErrorCode); // 解析IP數據包   
	}   
	if(ScanFIN)   
	{   
		closesocket(sockListen);   
		return   0;   
	}   
}   
// 定義狀態提示函數 
void   ProgressShow(void)    
{     
	//   進度條     
	char   *progressbar[12]=     
	{     
		"   |   ",     
			"   /   ",     
			"   -   ",     
			"   \\   ",     
			"   |   ",     
			"   /   ",     
			"   -   ",     
			"   \\   ",     
			"   |   ",     
			"   /   ",     
			"   -   ",     
			"   \\   ",     
	};     
	printf("   =%s=\r",   progressbar[ProgressTag]);   
	ProgressTag=(ProgressTag==11)?0:ProgressTag+1;   
	Sleep(2);   
}     

//主函數   
int   main(int   argc,char   **argv)   
{   
	int   iErrorCode;   
	int   datasize;   
	struct   hostent   *hp;   
	IP_HEADER   ip_header;   
	TCP_HEADER   tcp_header;   
	char   SendBuf[128]={0};
	ParseCmd(argc, argv);
     
	WSADATA   wsaData;
	// 初始化Winsock庫
	iErrorCode   =   WSAStartup(MAKEWORD(2,2),&wsaData);   
	CheckSockError(iErrorCode,   "WSAStartup()");
	// 創建發送數據包套接字
	sockRaw   =   socket(AF_INET   ,   SOCK_RAW   ,   IPPROTO_IP);   
	CheckSockError(sockRaw,   "socket()");
	// 創建接收數據包套接字
	sockListen   =   socket(AF_INET   ,   SOCK_RAW   ,   IPPROTO_IP);   
	CheckSockError(sockListen,   "socket");   
    
	//設置IP頭操作選項   
	BOOL   bOpt   =   true;   
	iErrorCode   =   setsockopt(sockRaw,IPPROTO_IP,IP_HDRINCL,(char   *)&bOpt,sizeof(bOpt));   
	CheckSockError(iErrorCode,   "setsockopt()");     
    
	//獲得本地IP   
	SOCKADDR_IN   sa;   
	unsigned   char   LocalName[256];   

	iErrorCode   =   gethostname((char*)LocalName,sizeof(LocalName)-1);   
	CheckSockError(iErrorCode,   "gethostname()");   
	if((hp = gethostbyname((char*)LocalName))   ==   NULL)   
	{   
		CheckSockError(SOCKET_ERROR,   "gethostbyname()");   
	}   
    // 設置本地地址結構
	memcpy(&sa.sin_addr.S_un.S_addr,hp->h_addr_list[0],hp->h_length); 
	sa.sin_family   =   AF_INET;   
	sa.sin_port   =   htons(7000);
	// 綁定套接字
	iErrorCode   =   bind(sockListen,   (PSOCKADDR)&sa,   sizeof(sa));   
	CheckSockError(iErrorCode,   "bind");     
	//獲得目標主機IP   
	memset(&targethost,0,sizeof(targethost));   
	targethost.sin_family   =   AF_INET;   
	targethost.sin_port   =   htons(TargetPort);   
	if((targethost.sin_addr.s_addr   =   inet_addr(TargetIP))   ==   INADDR_NONE)   
	{   
		if((hp   =   gethostbyname(TargetIP))   !=   NULL)   
		{   
			memcpy(&(targethost.sin_addr),hp->h_addr_list[0],hp->h_length);   
			targethost.sin_family   =   hp->h_addrtype;   
			printf("targethost.sin_addr   =   %s\n",inet_ntoa(targethost.sin_addr));   
		}   
		else   
		{   
			CheckSockError(SOCKET_ERROR,   "gethostbyname()");   
		}   
	}   
    
	//開啟監聽線程   
	HANDLE   Thread=CreateThread(NULL,0,RecvThread,0,0,0);   
	//填充IP首部   
	ip_header.h_lenver=(4<<4   |   sizeof(ip_header)/sizeof(unsigned   long));   
	//高四位IP版本號,低四位首部長度   
	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位生存時間TTL   
	ip_header.proto=IPPROTO_TCP;   //8位協議(TCP,UDP…)   
	ip_header.checksum=0;   //16位IP首部校驗和   
	ip_header.sourceIP=sa.sin_addr.s_addr;   //32位源IP地址   
	ip_header.destIP=targethost.sin_addr.s_addr;   //32位目的IP地址   
    
    
	//填充TCP首部   
	tcp_header.th_sport=htons(7000);   //源端口號   
	tcp_header.th_lenres=(sizeof(TCP_HEADER)/4<<4|0);   //TCP長度和保留位   
	tcp_header.th_win=htons(16384);     
    
    
	//填充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));   
    
    
	Sleep(500);   
	printf("\n");   
	printf("開始掃描主機  %s  端口范圍 %d-%d \n\n",TargetIP,TargetPort,TargetPortEnd);   
	DWORD dwStart=GetTickCount();//開始計時    
	for(;TargetPort<TargetPortEnd;TargetPort++)   
	{   
		
		ProgressShow();   
		tcp_header.th_dport=htons(TargetPort);   //目的端口號   
		tcp_header.th_ack=0;   //ACK序列號置為0   
		tcp_header.th_flag=2;   //SYN   標志   
		tcp_header.th_seq=htonl(SEQ);   //SYN序列號   
		tcp_header.th_urp=0;   //偏移   
		tcp_header.th_sum=0;   //校驗和   
		//計算TCP校驗和,計算校驗和時需要包括TCP   pseudo   header     
		memcpy(SendBuf,&psd_header,sizeof(psd_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));   
		memcpy(SendBuf+sizeof(ip_header),&tcp_header,sizeof(tcp_header));   
		memset(SendBuf+sizeof(ip_header)+sizeof(tcp_header),0,4);   
		datasize=sizeof(ip_header)+sizeof(tcp_header);   
		ip_header.checksum=checksum((USHORT   *)SendBuf,datasize);   
		
		//填充發送緩沖區   
		memcpy(SendBuf,&ip_header,sizeof(ip_header));   
		
		//發送TCP報文   
		iErrorCode=sendto(sockRaw,SendBuf,datasize,0,(struct   sockaddr*)   &targethost,   
			sizeof(targethost));   
		CheckSockError(iErrorCode,   "sendto()");   
	}   
	DWORD dwEnd=GetTickCount();//計時結束   
	ScanFIN=TRUE;   
	printf("\n關閉線程.....\n\n");
	// 等待線程退出
	WaitForSingleObject(Thread,5000);   
	CloseHandle(Thread);   
	printf("端口掃描消耗時間 : %d ms ",dwEnd-dwStart);//顯示耗時   
	//關閉套接字,釋放相關資源   
	if(sockRaw   !=   INVALID_SOCKET)
	{
		closesocket(sockRaw);
	}
	WSACleanup();   
	return   0;   
  }     

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品白丝jk黑袜喷水| 久久成人久久鬼色| 日韩视频中午一区| 懂色一区二区三区免费观看| 国产女主播视频一区二区| 色综合久久九月婷婷色综合| 亚洲综合激情另类小说区| 日韩欧美电影一二三| 成人动漫一区二区在线| 亚洲精品久久久久久国产精华液| 欧美久久久一区| 国产高清亚洲一区| 午夜精品久久久久久久| 久久亚洲捆绑美女| 欧美制服丝袜第一页| 国产呦精品一区二区三区网站| 亚洲欧洲美洲综合色网| 91精品国产综合久久蜜臀 | 欧美色手机在线观看| 狠狠色丁香久久婷婷综| 亚洲黄一区二区三区| 久久久久久久一区| 69堂国产成人免费视频| 成人avav影音| 久久国产人妖系列| 一区二区三区中文免费| 国产无人区一区二区三区| 欧美午夜电影网| 成人涩涩免费视频| 久久激情综合网| 亚洲综合图片区| 国产精品久久久久久久久图文区 | 91精品国产综合久久福利| 丁香桃色午夜亚洲一区二区三区| 中文字幕中文字幕一区| 91精品国产91久久综合桃花| caoporn国产一区二区| 久久99精品国产.久久久久久| 玉米视频成人免费看| 中文字幕精品一区二区三区精品| 日韩欧美中文字幕一区| 欧美精品1区2区| 在线精品亚洲一区二区不卡| 99久久精品一区二区| 国产一区二区女| 蜜臀久久久久久久| 亚洲成人免费视| 亚洲激情网站免费观看| 亚洲欧洲国产日本综合| 国产精品情趣视频| 欧美极品另类videosde| 久久久亚洲精品石原莉奈| 精品美女一区二区| 精品国产区一区| 2024国产精品| 久久九九影视网| 中文字幕欧美三区| 国产精品视频一二| 欧美激情中文不卡| 久久久久久电影| 久久久国产精品午夜一区ai换脸| 欧美不卡123| 久久综合99re88久久爱| 久久网站热最新地址| 欧美videossexotv100| 欧美一区二区三区免费观看视频| 欧美久久久久久久久中文字幕| 欧美日韩一区二区电影| 99天天综合性| 成人精品视频.| 国产福利一区在线| 99精品久久99久久久久| 成人黄色软件下载| 97久久超碰精品国产| 99国产精品99久久久久久| 99re热视频这里只精品| 日本韩国精品在线| 欧美日韩国产综合草草| 3d动漫精品啪啪一区二区竹菊| 日韩一区二区在线看| wwwwxxxxx欧美| 国产精品久线在线观看| 亚洲自拍偷拍网站| 日韩高清欧美激情| 国产精品亚洲成人| 色综合久久久久综合| 5月丁香婷婷综合| 久久综合九色综合欧美就去吻| 久久精品夜夜夜夜久久| 国产精品无圣光一区二区| 亚洲婷婷综合色高清在线| 国产精品美女久久久久久久网站| 一区二区不卡在线播放 | 精品久久久三级丝袜| 久久久一区二区三区| 亚洲视频狠狠干| 天堂蜜桃91精品| 国产成人精品亚洲777人妖 | 国产揄拍国内精品对白| www.欧美色图| 91精品国产综合久久蜜臀| 中文字幕第一页久久| 亚洲高清久久久| 国产精品99久久久久| 欧美中文字幕一二三区视频| 91精品国产全国免费观看| 中文字幕成人在线观看| 亚洲第一主播视频| 国产精品性做久久久久久| 欧美日韩和欧美的一区二区| 久久久久亚洲蜜桃| 亚洲成人午夜影院| jlzzjlzz亚洲女人18| 欧美一区二区三区婷婷月色| 中文字幕乱码日本亚洲一区二区| 日韩精品每日更新| av亚洲精华国产精华精华| 日韩区在线观看| 亚洲国产精品一区二区尤物区| 国产综合色视频| 欧美无乱码久久久免费午夜一区| 国产日本一区二区| 日韩成人精品在线| 在线观看欧美日本| 国产精品无人区| 激情综合色综合久久| 欧美午夜电影在线播放| 国产精品萝li| 偷拍一区二区三区| 精品一区二区三区影院在线午夜| 欧美视频在线观看一区二区| 国产精品国产成人国产三级| 极品少妇xxxx精品少妇偷拍| 欧美日韩国产色站一区二区三区| 1000部国产精品成人观看| 国产suv精品一区二区三区| 91精选在线观看| 亚洲一区二区三区美女| 99re成人精品视频| 久久久影视传媒| 黄一区二区三区| 欧美一区二区三区播放老司机| 亚洲国产美女搞黄色| 色欧美乱欧美15图片| 国产精品卡一卡二卡三| 成人一区二区三区中文字幕| 久久精品一区二区三区不卡牛牛 | 久久午夜色播影院免费高清| 强制捆绑调教一区二区| 欧美精品在线一区二区三区| 亚洲欧洲综合另类| 97se亚洲国产综合在线| 欧美精彩视频一区二区三区| 国产精品99久久久久久久女警| 亚洲精品在线网站| 狠狠久久亚洲欧美| 久久亚洲精品国产精品紫薇| 精品一区精品二区高清| 欧美不卡激情三级在线观看| 男女性色大片免费观看一区二区 | www久久精品| 麻豆精品一区二区三区| 欧美一区二区黄色| 午夜av一区二区三区| 色婷婷精品大视频在线蜜桃视频| 亚洲毛片av在线| 欧美日韩中文字幕精品| 亚洲成人动漫在线观看| 欧美精品在欧美一区二区少妇| 亚洲午夜免费电影| 91久久奴性调教| 亚洲精品高清在线观看| 欧美日韩成人综合在线一区二区| 首页国产欧美久久| 久久亚洲春色中文字幕久久久| 国产91清纯白嫩初高中在线观看| 精品久久一区二区| 豆国产96在线|亚洲| 亚洲男人的天堂在线aⅴ视频| 91福利国产成人精品照片| 日韩精品免费专区| 久久在线观看免费| 99久久精品免费看| 午夜精品久久久久久久久久| 欧美一区二区观看视频| 美国毛片一区二区三区| 国产日本亚洲高清| 欧美色综合天天久久综合精品| 午夜久久电影网| 久久精品一级爱片| 91激情五月电影| 男男成人高潮片免费网站| 国产欧美一区视频| 欧美熟乱第一页| 国产黑丝在线一区二区三区| 亚洲男人的天堂av| 久久综合九色欧美综合狠狠| 色偷偷88欧美精品久久久| 免费在线观看视频一区| 国产精品对白交换视频|