日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

利用SPI编写类似sockscap的代理工具

發布時間:2023/12/14 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用SPI编写类似sockscap的代理工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

利用SPI編寫類似sockscap的代理工具

最近幫一個朋友實現sockscap的socks V5代理功能,sockscap貌似是通過API HOOK實現,一開始我便嘗試這種方式,遇到各種麻煩的問題,還是用SPI的LSP來試試吧。

SPI的出現其實就是微軟為了方便程序員對網絡API的各種HOOK,從而省去一些麻煩,然而相對的也會增加不少問題。對于SPI中的LSP這種分層的結構,可以很好的使用強盜手法將自己當作老大放在最上層,但是,如果有其他程序也使用同樣的手法,那么就會產生沖突了。

好吧進入正題。。。

一、LSP的安裝,先拋開socks代理不說

1、構造自己的LSP,并安裝之;

2、遍歷已有 服務提供者,找到剛安裝的LSP入口ID

3、構造自己的協議鏈,并安裝之;

4、對所有協議鏈進行排序,并將我們的協議鏈放到最上面。

二、LSP的編寫

主要操作都在WSPStartup中,其他WSP函數就是對原函數的HOOK,詳情看下面代碼。

MSDN有完整LSP代碼的下載:

ftp://ftp.microsoft.com/bussys/WinSock/winsock2/layered.zip

同時,網上也有一些源代碼,與MSDN代碼相比,基本一樣,只是在LSP安裝的第一步有所不同,MSDN代碼是手工構造LSP,而網上許多代碼都是通過拷貝系統已有LSP進行對自己的LSP構造。

下面代碼來自網上:


INST_LSP.Cpp

#define UNICODE #define _UNICODE #include <Ws2spi.h> #include <Sporder.h> // 定義了WSCWriteProviderOrder函數 #include <windows.h> #include <stdio.h> #pragma comment(lib, "Ws2_32.lib") #pragma comment(lib, "Rpcrt4.lib") // 實現了UuidCreate函數 // 要安裝的LSP的硬編碼,在移除的時候還要使用它 GUID ProviderGuid = {0xd3c21122, 0x85e1, 0x48f3,{0x9a,0xb6,0x23,0xd9,0x0c,0x73,0x07,0xef}}; LPWSAPROTOCOL_INFOW GetProvider(LPINT lpnTotalProtocols) {DWORD dwSize = 0;int nError;LPWSAPROTOCOL_INFOW pProtoInfo = NULL;// 取得需要的長度if (::WSCEnumProtocols(NULL, pProtoInfo, &dwSize, &nError) == SOCKET_ERROR){if (nError != WSAENOBUFS)return NULL;}pProtoInfo = (LPWSAPROTOCOL_INFOW)::GlobalAlloc(GPTR, dwSize);*lpnTotalProtocols = ::WSCEnumProtocols(NULL, pProtoInfo, &dwSize, &nError);return pProtoInfo; } void FreeProvider(LPWSAPROTOCOL_INFOW pProtoInfo) {::GlobalFree(pProtoInfo); } BOOL InstallProvider(WCHAR *pwszPathName) {WCHAR wszLSPName[] = L"ZetsinLSP";LPWSAPROTOCOL_INFOW pProtoInfo;int nProtocols;WSAPROTOCOL_INFOW OriginalProtocolInfo[3];DWORD dwOrigCatalogId[3];int nArrayCount = 0;DWORD dwLayeredCatalogId; // 我們分層協議的目錄ID號int nError;// 找到我們的下層協議,將信息放入數組中 // 枚舉所有服務程序提供者pProtoInfo = GetProvider(&nProtocols);BOOL bFindUdp = FALSE;BOOL bFindTcp = FALSE;BOOL bFindRaw = FALSE;for (int i=0; i<nProtocols; i++){if (pProtoInfo[i].iAddressFamily == AF_INET){if (!bFindUdp && pProtoInfo[i].iProtocol == IPPROTO_UDP){memcpy(&OriginalProtocolInfo[nArrayCount], &pProtoInfo[i], sizeof(WSAPROTOCOL_INFOW));OriginalProtocolInfo[nArrayCount].dwServiceFlags1 =OriginalProtocolInfo[nArrayCount].dwServiceFlags1 & (~XP1_IFS_HANDLES);dwOrigCatalogId[nArrayCount++] = pProtoInfo[i].dwCatalogEntryId;bFindUdp = TRUE;}if (!bFindTcp && pProtoInfo[i].iProtocol == IPPROTO_TCP){memcpy(&OriginalProtocolInfo[nArrayCount], &pProtoInfo[i], sizeof(WSAPROTOCOL_INFOW));OriginalProtocolInfo[nArrayCount].dwServiceFlags1 =OriginalProtocolInfo[nArrayCount].dwServiceFlags1 & (~XP1_IFS_HANDLES);dwOrigCatalogId[nArrayCount++] = pProtoInfo[i].dwCatalogEntryId;bFindTcp = TRUE;}if (!bFindRaw && pProtoInfo[i].iProtocol == IPPROTO_IP){memcpy(&OriginalProtocolInfo[nArrayCount], &pProtoInfo[i], sizeof(WSAPROTOCOL_INFOW));OriginalProtocolInfo[nArrayCount].dwServiceFlags1 =OriginalProtocolInfo[nArrayCount].dwServiceFlags1 & (~XP1_IFS_HANDLES);dwOrigCatalogId[nArrayCount++] = pProtoInfo[i].dwCatalogEntryId;bFindRaw = TRUE;}}} // 安裝我們的分層協議,獲取一個dwLayeredCatalogId // 隨便找一個下層協議的結構復制過來即可 WSAPROTOCOL_INFOW LayeredProtocolInfo;memcpy(&LayeredProtocolInfo, &OriginalProtocolInfo[0], sizeof(WSAPROTOCOL_INFOW)); // 修改協議名稱,類型,設置PFL_HIDDEN標志 wcscpy_s(LayeredProtocolInfo.szProtocol, wszLSPName);LayeredProtocolInfo.ProtocolChain.ChainLen = LAYERED_PROTOCOL; // 0;LayeredProtocolInfo.dwProviderFlags |= PFL_HIDDEN; // 安裝if (::WSCInstallProvider(&ProviderGuid,pwszPathName, &LayeredProtocolInfo, 1, &nError) == SOCKET_ERROR){printf("%d", nError);return FALSE;} // 重新枚舉協議,獲取分層協議的目錄ID號 FreeProvider(pProtoInfo);pProtoInfo = GetProvider(&nProtocols);for (int i=0; i<nProtocols; i++){if (memcmp(&pProtoInfo[i].ProviderId, &ProviderGuid, sizeof(ProviderGuid)) == 0){dwLayeredCatalogId = pProtoInfo[i].dwCatalogEntryId;break;}} // 安裝協議鏈 // 修改協議名稱,類型WCHAR wszChainName[WSAPROTOCOL_LEN + 1];for (int i=0; i<nArrayCount; i++){swprintf(wszChainName, L"%ws over %ws", wszLSPName, OriginalProtocolInfo[i].szProtocol);wcscpy_s(OriginalProtocolInfo[i].szProtocol, wszChainName);if (OriginalProtocolInfo[i].ProtocolChain.ChainLen == 1){OriginalProtocolInfo[i].ProtocolChain.ChainEntries[1] = dwOrigCatalogId[i];}else{for (int j = OriginalProtocolInfo[i].ProtocolChain.ChainLen; j>0; j--){OriginalProtocolInfo[i].ProtocolChain.ChainEntries[j]= OriginalProtocolInfo[i].ProtocolChain.ChainEntries[j-1];}}OriginalProtocolInfo[i].ProtocolChain.ChainLen ++;OriginalProtocolInfo[i].ProtocolChain.ChainEntries[0] = dwLayeredCatalogId;} // 獲取一個Guid,安裝之 GUID ProviderChainGuid;if (::UuidCreate(&ProviderChainGuid) == RPC_S_OK){if (::WSCInstallProvider(&ProviderChainGuid,pwszPathName, OriginalProtocolInfo, nArrayCount, &nError) == SOCKET_ERROR){return FALSE;}}elsereturn FALSE; // 重新排序Winsock目錄,將我們的協議鏈提前 // 重新枚舉安裝的協議 FreeProvider(pProtoInfo);pProtoInfo = GetProvider(&nProtocols);PDWORD dwIds = (PDWORD)malloc(sizeof(DWORD) * nProtocols);int nIndex = 0; // 添加我們的協議鏈for (int i=0; i<nProtocols; i++){if ((pProtoInfo[i].ProtocolChain.ChainLen > 1) &&(pProtoInfo[i].ProtocolChain.ChainEntries[0] == dwLayeredCatalogId))dwIds[nIndex++] = pProtoInfo[i].dwCatalogEntryId;} // 添加其它協議for (int i=0; i<nProtocols; i++){if ((pProtoInfo[i].ProtocolChain.ChainLen <= 1) ||(pProtoInfo[i].ProtocolChain.ChainEntries[0] != dwLayeredCatalogId))dwIds[nIndex++] = pProtoInfo[i].dwCatalogEntryId;} // 重新排序Winsock目錄if ((nError = ::WSCWriteProviderOrder(dwIds, nIndex)) != ERROR_SUCCESS){return FALSE;}FreeProvider(pProtoInfo);return TRUE; } BOOL RemoveProvider() {LPWSAPROTOCOL_INFOW pProtoInfo;int nProtocols;DWORD dwLayeredCatalogId; // 根據Guid取得分層協議的目錄ID號pProtoInfo = GetProvider(&nProtocols);int nError;int i;for (i=0; i<nProtocols; i++){if (memcmp(&ProviderGuid, &pProtoInfo[i].ProviderId, sizeof(ProviderGuid)) == 0){dwLayeredCatalogId = pProtoInfo[i].dwCatalogEntryId;break;}}if (i < nProtocols){ // 移除協議鏈for (i=0; i<nProtocols; i++){if ((pProtoInfo[i].ProtocolChain.ChainLen > 1) &&(pProtoInfo[i].ProtocolChain.ChainEntries[0] == dwLayeredCatalogId)){::WSCDeinstallProvider(&pProtoInfo[i].ProviderId, &nError);}}// 移除分層協議::WSCDeinstallProvider(&ProviderGuid, &nError);}else return FALSE;return TRUE; } void main(int argc, char *argv[]) {char *ptr; //if(argc==2) {ptr = argv[1];while (*ptr)*ptr++ = tolower(*ptr);int test;scanf("%d", &test);if (test == 1) //if(strcmp(argv[1], "-install")==0) {TCHAR szPathName[256];TCHAR* p;if (::GetFullPathName(L"LSP.dll", 256, szPathName, &p) != 0){if (InstallProvider(szPathName)){printf(" Install successully. /n");return;}}printf(" Install failed. /n");return;}else //else if(strcmp(argv[1],"-remove")==0) {if (RemoveProvider())printf(" Deinstall successully. /n");elseprintf(" Deinstall failed. /n");return;}}printf(" Usage: Instlsp [ -install │ -remove ] /n"); }

LSP.Cpp

#define UNICODE #define _UNICODE #include <ws2spi.h> #include <errno.h> #include <fstream> #pragma comment(lib,"Ws2_32.lib") GUID filterguid = {0xd3c21122, 0x85e1, 0x48f3,{0x9a,0xb6,0x23,0xd9,0x0c,0x73,0x07,0xef}}; LPWSAPROTOCOL_INFOW ProtoInfo=NULL; WSPPROC_TABLE NextProcTable; DWORD ProtoInfoSize=0; int TotalProtos=0; // 輸出函數 int PutDbgStr(LPCTSTR lpFmt, ...) {TCHAR Msg[1024];int len=wvsprintf(Msg,lpFmt,va_list(1+&lpFmt));OutputDebugString(Msg);return len; } // 獲取各種值 BOOL GetLSP() {int errorcode;ProtoInfo=NULL;ProtoInfoSize=0;TotalProtos=0;if (WSCEnumProtocols(NULL,ProtoInfo,&ProtoInfoSize,&errorcode)==SOCKET_ERROR){if (errorcode!=WSAENOBUFS){PutDbgStr(L"First WSCEnumProtocols Error!");return FALSE;}}if ((ProtoInfo=(LPWSAPROTOCOL_INFOW)GlobalAlloc(GPTR,ProtoInfoSize))==NULL){PutDbgStr(L"GlobalAlloc Error!");return FALSE;}if ((TotalProtos=WSCEnumProtocols(NULL,ProtoInfo,&ProtoInfoSize,&errorcode))==SOCKET_ERROR){PutDbgStr(L"Second WSCEnumProtocols Error!");return FALSE;}return TRUE; } // 釋放內存 void FreeLSP() {GlobalFree(ProtoInfo); } // DLL入口函數 BOOL WINAPI DllMain(HINSTANCE hmodule,DWORD reason,LPVOID lpreserved) {TCHAR processname[MAX_PATH];if (reason==DLL_PROCESS_ATTACH){GetModuleFileName(NULL,processname,MAX_PATH);PutDbgStr(L"%s Loading IPFilter ...", processname);}return TRUE; } /********************************* 改寫WSP函數,只有WSPConnect被改寫成調用socksProxy函數,其它的直接調用下層WSP函數 ****************************************/ //WSPConnect int WSPAPI WSPConnect(SOCKET s,const struct sockaddr *name,int namelen,LPWSABUF lpCallerData,LPWSABUF lpCalleeData,LPQOS lpSQOS,LPQOS lpGQOS,LPINT lpErrno) {return NextProcTable.lpWSPConnect(s, name, namelen, lpCallerData, lpCalleeData, lpSQOS, lpGQOS, lpErrno); } } //WSPSocket SOCKET WINAPI WSPSocket(__in int af,__in int type,__in int protocol,__in LPWSAPROTOCOL_INFO lpProtocolInfo,__in GROUP g,DWORD dwFlags,__out LPINT lpErrno ) {PutDbgStr(L"WSPSocket");return NextProcTable.lpWSPSocket(af, type, protocol, lpProtocolInfo, g, dwFlags, lpErrno); } //WSPBind int WINAPI WSPBind(__in SOCKET s,__in const struct sockaddr *name,__in int namelen,__out LPINT lpErrno ) {PutDbgStr(L"WSPBind");return NextProcTable.lpWSPBind(s, name, namelen, lpErrno); } //WSPSend int WINAPI WSPSend(__in SOCKET s,__in LPWSABUF lpBuffers,__in DWORD dwBufferCount,__out LPDWORD lpNumberOfBytesSent,__in DWORD dwFlags,__in LPWSAOVERLAPPED lpOverlapped,__in LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,__in LPWSATHREADID lpThreadId,__out LPINT lpErrno ) {PutDbgStr(L"WSPSend");return NextProcTable.lpWSPSend(s, lpBuffers, dwBufferCount, lpNumberOfBytesSent, dwFlags, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno); } //WSPSendTo int WINAPI WSPSendTo(__in SOCKET s,__in LPWSABUF lpBuffers,__in DWORD dwBufferCount,__out LPDWORD lpNumberOfBytesSent,__in DWORD dwFlags,__in const struct sockaddr *lpTo,__in int iTolen,__in LPWSAOVERLAPPED lpOverlapped,__in LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,__in LPWSATHREADID lpThreadId,__out LPINT lpErrno ) {PutDbgStr(L"WSPSendTo");return NextProcTable.lpWSPSendTo(s, lpBuffers, dwBufferCount, lpNumberOfBytesSent, dwFlags, lpTo, iTolen, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno); } //WSPRecv int WINAPI WSPRecv(__in SOCKET s,__inout LPWSABUF lpBuffers,__in DWORD dwBufferCount,__out LPDWORD lpNumberOfBytesRecvd,__inout LPDWORD lpFlags,__in LPWSAOVERLAPPED lpOverlapped,__in LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,__in LPWSATHREADID lpThreadId,__out LPINT lpErrno ) {PutDbgStr(L"WSPRecv");return NextProcTable.lpWSPRecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno); } //WSPRecvFrom int WINAPI WSPRecvFrom(__in SOCKET s,__inout LPWSABUF lpBuffers,__in DWORD dwBufferCount,__out LPDWORD lpNumberOfBytesRecvd,__inout LPDWORD lpFlags,__out struct sockaddr *lpFrom,__inout LPINT lpFromlen,__in LPWSAOVERLAPPED lpOverlapped,__in LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,__in LPWSATHREADID lpThreadId,__inout LPINT lpErrno ) {PutDbgStr(L"WSPRecvFrom");return NextProcTable.lpWSPRecvFrom(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpFrom, lpFromlen, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno); } //WSPStartup int WSPAPI WSPStartup(WORD wversionrequested,LPWSPDATA lpwspdata,LPWSAPROTOCOL_INFOW lpProtoInfo,WSPUPCALLTABLE upcalltable,LPWSPPROC_TABLE lpproctable ) {PutDbgStr(L"IPFilter WSPStartup ...");int i;int errorcode;int filterpathlen;DWORD layerid=0;DWORD nextlayerid=0;TCHAR *filterpath;HINSTANCE hfilter;LPWSPSTARTUP wspstartupfunc=NULL;if (lpProtoInfo->ProtocolChain.ChainLen<=1){PutDbgStr(L"ChainLen<=1");return FALSE;}GetLSP();for (i=0;i<TotalProtos;i++){if (memcmp(&ProtoInfo[i].ProviderId,&filterguid,sizeof(GUID))==0){layerid=ProtoInfo[i].dwCatalogEntryId;break;}}for (i=0;i<lpProtoInfo->ProtocolChain.ChainLen;i++){if (lpProtoInfo->ProtocolChain.ChainEntries[i]==layerid){nextlayerid=lpProtoInfo->ProtocolChain.ChainEntries[i+1];break;}}filterpathlen=MAX_PATH;filterpath=(TCHAR*)GlobalAlloc(GPTR,filterpathlen);for (i=0;i<TotalProtos;i++){if (nextlayerid==ProtoInfo[i].dwCatalogEntryId){if (WSCGetProviderPath(&ProtoInfo[i].ProviderId,filterpath,&filterpathlen,&errorcode)==SOCKET_ERROR){PutDbgStr(L"WSCGetProviderPath Error!");return WSAEPROVIDERFAILEDINIT;}break;}}if (!ExpandEnvironmentStrings(filterpath,filterpath,MAX_PATH)){PutDbgStr(L"ExpandEnvironmentStrings Error!");return WSAEPROVIDERFAILEDINIT;}if ((hfilter=LoadLibrary(filterpath))==NULL){PutDbgStr(L"LoadLibrary Error!");return WSAEPROVIDERFAILEDINIT;}if ((wspstartupfunc=(LPWSPSTARTUP)GetProcAddress(hfilter,"WSPStartup"))==NULL){PutDbgStr(L"GetProcessAddress Error!");return WSAEPROVIDERFAILEDINIT;}if ((errorcode=wspstartupfunc(wversionrequested,lpwspdata,lpProtoInfo,upcalltable,lpproctable))!=ERROR_SUCCESS){PutDbgStr(L"wspstartupfunc Error!");return errorcode;}NextProcTable=*lpproctable;// 保存原來的入口函數表 //改寫函數lpproctable->lpWSPSendTo = WSPSendTo;lpproctable->lpWSPSend = WSPSend;lpproctable->lpWSPBind = WSPBind;lpproctable->lpWSPConnect = WSPConnect;lpproctable->lpWSPRecv = WSPRecv;lpproctable->lpWSPRecvFrom = WSPRecvFrom;lpproctable->lpWSPSocket = WSPSocket;FreeLSP();return 0; }


關于SOCKS V5代理,下回修改文章再貼上。

zetsin@gmail.com

2011-04-30 20:57:02


要說SOCKS V5代理,其實非常簡單,細讀一遍RFC1928文檔就OK了,文檔地址如下:

http://www.ietf.org/rfc/rfc1928.txt

如果需要遠程解析域名,則將上述文檔中第四點的 ATYP 置為 /X03

最后將前面所寫的LSP與SOCKS V5代理結合,TCP的話只要攔截WSPCONNECT函數,UDP因為不是面向連接的所以只要攔截WSPSENDTO即可,具體代碼如下:

// 連接socks5代理

int socksProxy(SOCKET s, const struct sockaddr *name, int namelen) {int rc = 0; // 這里應該先保存下socket的阻塞/非阻塞類型,在最后面跟據這里的值將它還原,但是不知道怎樣獲取此類型 // 修改socket為阻塞類型if (rc = WSAEventSelect(s, 0, NULL))//這一個可以不用執行 {PutDbgStr(L"Error %d : WSAEventSelect Failure!", WSAGetLastError());}else{PutDbgStr(L"Message : WSAEventSelect successfully!");}unsigned long nonBlock = 0;if (rc = ioctlsocket(s, FIONBIO, &nonBlock))// 這個真正修改為阻塞類型 {PutDbgStr(L"Error %d : Set Blocking Failure!", WSAGetLastError());}else{PutDbgStr(L"Message : Set Blocking successfully!");} //連接代理服務器 sockaddr_in serveraddr;memset(&serveraddr, 0, sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_addr.S_un.S_addr = inet_addr("76.120.160.122"); //代理服務器地址,從無憂代理網獲取的,質量還行,不過只能用幾天,發現連不上的話重新獲取吧serveraddr.sin_port = htons(27977); // 端口號 WSABUF DataBuf;char buffer[4];memset(buffer, 0, sizeof(buffer));DataBuf.len = 4;DataBuf.buf = buffer;int err = 0;if ((rc = NextProcTable.lpWSPConnect(s, (struct sockaddr *)&serveraddr, sizeof(struct sockaddr), &DataBuf, NULL, NULL, NULL, &err)) != 0){PutDbgStr(L"Error %d : attempting to connect to SOCKS server!", err);return rc;}else{PutDbgStr(L"Message : Connect to SOCKS server successfully!");} //發送請求來協商版本和認證方法 //VER NMETHODS METHODS //1 1 1 to 255char verstring[257];verstring[0] = 0x05; //VER (1 Byte)verstring[1] = 0x01; //NMETHODS (1 Byte)verstring[2] = 0x00; //METHODS (allow 1 - 255 bytes, current 1 byte)if ((rc = send(s, verstring, 3, 0)) < 0){PutDbgStr(L"Error %d : attempting to send SOCKS method negotiation!", WSAGetLastError());return rc;}else{PutDbgStr(L"Message : send SOCKS method negotiation successfully!");} //接收代理服務器返回信息 //VER METHOD //1 1/*當前定義的方法有:· X'00' 不需要認證· X'01' GSSAPI· X'02' 用戶名/密碼· X'03' -- X'7F' 由IANA分配· X'80' -- X'FE' 為私人方法所保留的· X'FF' 沒有可以接受的方法*/if ((rc = recv(s, verstring, 257, 0)) < 0){PutDbgStr(L"Error %d : attempting to receive SOCKS method negotiation reply!", WSAGetLastError());return rc;}else{PutDbgStr(L"Message : receive SOCKS method negotiation reply successfully!");}if (rc < 2)//返回2字節 {PutDbgStr(L"Error : Short reply from SOCKS server!");rc = ECONNREFUSED;return rc;}else{PutDbgStr(L"Message : reply from SOCKS server larger than 2");} // 代理服務器選擇方法 // 判斷我們的方法是否可行if (verstring[1] == '/xff'){PutDbgStr(L"Error : SOCKS server refused authentication methods!");rc = ECONNREFUSED;return rc;}else if (verstring[1] == '/x02')// 方法2 : 用戶名/密碼 { //另外處理PutDbgStr(L"Error : SOCKS server need username/password!");}else if (verstring[1] == '/x00')// 方法0: 不需要認證 { //發送SOCKS請求 //VER CMD RSV ATYP DST.ADDR DST.PROT //1 1 X'00' 1 Variable 2/* VER 協議版本: X'05'· CMD· CONNECT:X'01'· BIND:X'02'· UDP ASSOCIATE:X'03'· RSV 保留· ATYP 后面的地址類型· IPV4:X'01'· 域名:X'03'· IPV6:X'04''· DST.ADDR 目的地址· DST.PORT 以網絡字節順序出現的端口號SOCKS服務器會根據源地址和目的地址來分析請求,然后根據請求類型返回一個或多個應答。*/struct sockaddr_in sin;sin = *(const struct sockaddr_in *)name;char buf[10];buf[0] = '/x05'; // 版本 SOCKS5buf[1] = '/x01'; // 連接請求buf[2] = '/x00'; // 保留字段buf[3] = '/x01'; // IPV4memcpy(&buf[4], &sin.sin_addr.S_un.S_addr, 4);memcpy(&buf[8], &sin.sin_port, 2); //發送if ((rc = send(s, buf, 10, 0)) < 0){PutDbgStr(L"Error %d : attempting to send SOCKS connect command!", WSAGetLastError());return rc;}else{PutDbgStr(L"Message : send SOCKS connect command successfully!");} //應答 //VER REP RSV ATYP BND.ADDR BND.PORT //1 1 X'00' 1 Variable 2/*VER 協議版本: X'05'· REP 應答字段:· X'00' 成功· X'01' 普通的SOCKS服務器請求失敗· X'02' 現有的規則不允許的連接· X'03' 網絡不可達· X'04' 主機不可達· X'05' 連接被拒· X'06' TTL超時· X'07' 不支持的命令· X'08' 不支持的地址類型· X'09' - X'FF' 未定義· RSV 保留· ATYP 后面的地址類型· IPV4:X'01'· 域名:X'03'· IPV6:X'04'· BND.ADDR 服務器綁定的地址· BND.PORT 以網絡字節順序表示的服務器綁定的段口標識為RSV的字段必須設為X'00'。*/if ((rc = recv(s, buf, 10, 0)) < 0) // 用了天翼的網絡之后,這里就接收不到返回信息了,不解 {PutDbgStr(L"Error %d : attempting to receive SOCKS connection reply!", WSAGetLastError());rc = ECONNREFUSED;return rc;}else{PutDbgStr(L"Message : receive SOCKS connection reply successfully!");}if (rc < 10){PutDbgStr(L"Message : Short reply from SOCKS server!");return rc;}else{PutDbgStr(L"Message : reply from SOCKS larger than 10!");} //連接不成功if (buf[0] != '/x05'){PutDbgStr(L"Message : Socks V5 not supported!");return ECONNABORTED;}else{PutDbgStr(L"Message : Socks V5 is supported!");}if (buf[1] != '/x00'){PutDbgStr(L"Message : SOCKS connect failed!");switch ((int)buf[1]){case 1:PutDbgStr(L"General SOCKS server failure!");return ECONNABORTED;case 2:PutDbgStr(L"Connection denied by rule!");return ECONNABORTED;case 3:PutDbgStr(L"Network unreachable!");return ENETUNREACH;case 4:PutDbgStr(L"Host unreachable!");return EHOSTUNREACH;case 5:PutDbgStr(L"Connection refused!");return ECONNREFUSED;case 6:PutDbgStr(L"TTL Expired!");return ETIMEDOUT;case 7:PutDbgStr(L"Command not supported!");return ECONNABORTED;case 8:PutDbgStr(L"Address type not supported!");return ECONNABORTED;default:PutDbgStr(L"Unknown error!");return ECONNABORTED;}}else{PutDbgStr(L"Message : SOCKS connect Success!");}}else{PutDbgStr(L"Error : Method not supported!");} //修改socket為非阻塞類型nonBlock = 1;if (rc = ioctlsocket(s, FIONBIO, &nonBlock)){PutDbgStr(L"Error %d : Set Non-Blocking Failure!", WSAGetLastError());return rc;}else{PutDbgStr(L"Message : Set Non-Blocking Successful!");}PutDbgStr(L"Message : Success!");return 0; } //WSPConnect int WSPAPI WSPConnect(SOCKET s,const struct sockaddr *name,int namelen,LPWSABUF lpCallerData,LPWSABUF lpCalleeData,LPQOS lpSQOS,LPQOS lpGQOS,LPINT lpErrno) {PutDbgStr(L"WSPConnect");struct sockaddr_in sin;sin=*(const struct sockaddr_in *)name;if (strcmp(inet_ntoa(sin.sin_addr), "127.0.0.1") == 0){return NextProcTable.lpWSPConnect(s, name, namelen, lpCallerData, lpCalleeData, lpSQOS, lpGQOS, lpErrno);}return socksProxy(s, name, namelen); } //WSPSendTo int WINAPI WSPSendTo(__in SOCKET s,__in LPWSABUF lpBuffers,__in DWORD dwBufferCount,__out LPDWORD lpNumberOfBytesSent,__in DWORD dwFlags,__in const struct sockaddr *lpTo,__in int iTolen,__in LPWSAOVERLAPPED lpOverlapped,__in LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,__in LPWSATHREADID lpThreadId,__out LPINT lpErrno ) {PutDbgStr(L"WSPSendTo");struct sockaddr_in sin;sin=*(const struct sockaddr_in *)name;if (strcmp(inet_ntoa(sin.sin_addr), "127.0.0.1") == 0){return NextProcTable.lpWSPSendTo(s, lpBuffers, dwBufferCount, lpNumberOfBytesSent, dwFlags, lpTo, iTolen, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno);}return socksProxy(s, lpTo, iTolen); }

zetsin@gmail.com

2011-05-02 18:25:39

轉自:http://blog.csdn.net/ze_tsin/article/details/6376831

總結

以上是生活随笔為你收集整理的利用SPI编写类似sockscap的代理工具的全部內容,希望文章能夠幫你解決所遇到的問題。

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

一区二区精品久久 | 综合久久综合久久 | 91香蕉视频在线下载 | 久久伊99综合婷婷久久伊 | 精品免费国产一区二区三区四区 | 久久久国产精品亚洲一区 | 在线观看视频中文字幕 | 久久激情小视频 | 久热色超碰 | 色吧久久 | 亚洲精品视频在线免费播放 | 国产亚洲精品女人久久久久久 | 国产 欧美 日韩 | 日韩亚洲在线 | 久久国产精品成人免费浪潮 | 成人播放器 | 国产成人综合精品 | 国产精品99久久久久久久久久久久 | 久久欧美视频 | 国产激情小视频在线观看 | 免费看片成年人 | 日本中文字幕电影在线免费观看 | 日日干,天天干 | 亚洲极色 | 欧美日在线观看 | 亚洲精品美女在线 | 日韩精品一区二区三区视频播放 | 欧美一区二视频在线免费观看 | 国产黄影院色大全免费 | 蜜臀av.com | 久久久午夜剧场 | a视频在线播放 | 欧美成人精品欧美一级乱黄 | 亚洲精品美女在线观看播放 | 国产精品久久久久久999 | 久久五月网 | 日本在线观看视频一区 | 亚洲日本中文字幕在线观看 | 国产原创在线视频 | 最新婷婷色 | 国产免费久久 | 亚洲国产精品久久久 | 中文字幕在线播放第一页 | bbb搡bbb爽爽爽 | 97在线观看免费观看 | 成人精品一区二区三区电影免费 | www.国产在线 | 精品视频亚洲 | 日韩天堂网 | 国内精品二区 | 国产精品wwwwww | 成人中文字幕在线 | 国产精品一区二区久久精品 | 天天干,天天射,天天操,天天摸 | 久久久午夜精品福利内容 | 91视频在线免费 | 欧美福利久久 | 国内精品久久久久影院优 | 亚洲欧洲精品在线 | 亚洲 中文字幕av | 精品资源在线 | 久久九精品 | 精品国产诱惑 | 日韩在线免费看 | www狠狠操| 免费在线色电影 | 亚洲午夜久久久综合37日本 | 欧美国产日韩一区二区三区 | 久久久久国产a免费观看rela | 亚洲精品乱码久久久久久写真 | 免费看毛片网站 | 国内久久精品 | 成人片在线播放 | 婷婷夜夜 | 免费日韩一区二区 | 午夜精品一区二区三区免费 | 玖玖玖在线观看 | 天天操天天射天天舔 | 欧美日韩国产在线一区 | 成年人免费在线观看 | 这里有精品在线视频 | 国产一区欧美在线 | 久久久国产一区二区三区四区小说 | 超碰在线免费97 | 91福利视频一区 | 精品亚洲午夜久久久久91 | 91在线一区 | 亚洲精品午夜久久久久久久 | 免费观看av网站 | www欧美色| 久久99久久久久久 | 天天爽夜夜爽精品视频婷婷 | 六月激情久久 | 亚洲欧美成人综合 | 黄色在线看网站 | 成人久久亚洲 | 午夜精品久久久久久久99热影院 | 毛片区 | 国产精美视频 | 91麻豆看国产在线紧急地址 | 日韩综合一区二区 | 日韩最新在线视频 | 午夜久久久久 | 国产一区在线观看免费 | 96精品视频| 亚洲一二三久久 | 国产91精品看黄网站在线观看动漫 | 国产日产欧美在线观看 | 亚洲精品视频免费在线观看 | 国产精品美女久久久久aⅴ 干干夜夜 | 中文字幕美女免费在线 | 在线综合 亚洲 欧美在线视频 | 色在线国产| 国产精品电影一区二区 | 开心色停停 | 久久曰视频 | 亚洲激情婷婷 | 午夜精品剧场 | 黄网站www | 成年人视频在线 | 午夜精品视频一区二区三区在线看 | 97在线免费视频观看 | 综合在线色 | 久久福利小视频 | 久草av在线播放 | 久久久久国产一区二区三区四区 | 91视频在线看 | 91精品麻豆| 碰超在线 | 日韩精品一区二区三区高清免费 | 999毛片 | 国产美女精品视频 | av丝袜制服| 日韩视频1 | 99免费在线播放99久久免费 | 色婷五月天 | 毛片网在线播放 | 又黄又爽的视频在线观看网站 | 午夜影院一级片 | 日韩网站免费观看 | 国产成人av网址 | 日韩av电影中文字幕在线观看 | 午夜123 | 在线综合色 | 天天射天天搞 | 在线视频观看91 | 日本三级不卡 | 婷婷 中文字幕 | 色先锋av资源中文字幕 | a级片在线播放 | 欧美日在线观看 | 国产精品美女毛片真酒店 | 91精品夜夜 | 国产 中文 日韩 欧美 | 日韩av免费在线看 | 97在线看 | 欧美孕交vivoestv另类 | 久久久久久免费 | 在线va视频 | 青青河边草免费观看完整版高清 | 亚洲精品三级 | 韩国av免费看 | 久久毛片网站 | 国产区在线视频 | 91看片看淫黄大片 | 99视频精品视频高清免费 | 日韩av电影中文字幕在线观看 | 久久电影中文字幕视频 | 欧美影院久久 | 日日夜夜综合 | 国产亚洲精品日韩在线tv黄 | 韩日成人av | 国产亚洲一区二区三区 | 一区二区三区在线免费 | 久久免费播放视频 | 国产综合婷婷 | 狠狠ri| 国产一区免费视频 | 成人av视屏 | 丁香久久婷婷 | 久久久久久久久久免费 | 在线观看色网 | 麻豆视频一区 | 中文字幕一区二区三区在线播放 | 成人蜜桃视频 | 操碰av | 国产18精品乱码免费看 | 成人在线一区二区三区 | 色播五月激情五月 | 九色激情网| 成人性生交大片免费看中文网站 | 五月天六月丁香 | 青青草视频精品 | 久久情网| 精品国产理论 | 亚洲精品久久久蜜桃直播 | 国产精品毛片久久久久久久 | 国产亚洲精品成人 | 夜夜骑日日 | 午夜精品久久久 | 99久久精品无码一区二区毛片 | 黄色www| 精品国产免费av | 美女免费视频观看网站 | 亚洲精品高清在线观看 | 国产99亚洲| www.久久91 | 欧亚久久 | 日韩在线欧美在线 | 国产精品久久久久久久7电影 | 婷婷去俺也去六月色 | 玖玖爱在线观看 | 日韩精品在线一区 | 亚洲国产日韩欧美 | 欧美日韩国产精品一区 | 天天干天天综合 | 久久精品国产一区 | 国产福利在线 | 久久有精品| 国产中文字幕第一页 | 婷婷视频在线 | 国产成人一区二区三区免费看 | 国产一区在线不卡 | 亚洲aⅴ免费在线观看 | 最新在线你懂的 | 天天操伊人 | 欧美一区免费观看 | 九七人人干 | 九九热精| 欧美一区免费在线观看 | 亚洲国产电影在线观看 | 美女一区网站 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 久操视频在线播放 | 日韩免费久久 | 国产精品区免费视频 | 四虎www.| 国产99久久精品一区二区300 | 日本三级中文字幕在线观看 | 日本色小说视频 | 在线观看中文字幕 | 中文av不卡| 精品国产一区二区三区久久久 | 国产一区二区免费在线观看 | 亚洲精品综合久久 | 最新av在线播放 | 在线一区观看 | 亚州国产视频 | 日韩免费一二三区 | 激情综合网天天干 | 91麻豆精品一区二区三区 | 99久久精品电影 | 精品视频在线免费 | 国产精品女人网站 | 久久99操| 狠狠色丁香婷婷 | 久久线视频 | 天堂av免费观看 | 久久成人综合 | 综合网色 | 久久综合色一综合色88 | 日本中文字幕在线 | 夜夜干夜夜| 国产日韩一区在线 | 婷婷网址 | 午夜在线看 | 国内成人精品视频 | 狠狠色香婷婷久久亚洲精品 | 人人爱爱 | 午夜精品导航 | 久久精品成人 | 国产精品亚洲片夜色在线 | 99热在线观看免费 | 天天干 天天摸 天天操 | 欧美一级性生活视频 | 欧洲精品在线视频 | 九九99视频 | 91免费视频国产 | 久草线| 丁香婷婷色月天 | 日日草天天草 | 欧美a√大片 | 天天操天天草 | 国产亚洲精品久久久久久久久久久久 | 精品一区二区日韩 | 中文字幕色综合网 | 久久福利| 久久精品视| 一区二区三区中文字幕在线 | 女人高潮特级毛片 | 激情深爱五月 | 午夜av激情| 少妇视频一区 | 国产xxxx | 亚洲欧美日韩国产 | 蜜臀av夜夜澡人人爽人人桃色 | 天天干天天搞天天射 | 欧美在线观看小视频 | 日韩欧美网址 | 久草在线视频网站 | 成人播放器 | 国内视频一区二区 | 天天色影院 | 日韩欧美有码在线 | 91高清免费观看 | 男女拍拍免费视频 | 国内精品久久影院 | 国产小视频你懂的在线 | 日韩偷拍精品 | 二区视频在线 | 亚洲日本精品视频 | 免费亚洲黄色 | 在线韩国电影免费观影完整版 | 国模视频一区二区 | 国产免费大片 | 国产黄免费 | 韩国av一区二区三区 | 日韩黄色在线观看 | 草久久精品 | 97精品国产一二三产区 | 99国产精品久久久久久久久久 | 91精品网站| 国产在线观看中文字幕 | 九九久久国产 | 色综合a| 国产色婷婷精品综合在线手机播放 | 天天射天天色天天干 | 国产手机av | 国产精品九九九 | 国产a精品 | 曰本免费av | 亚洲成人av片在线观看 | 婷婷激情5月天 | 国产传媒一区在线 | 久久久久国产精品视频 | 午夜的福利 | 天天色天天操综合网 | 激情视频二区 | 久久国产网站 | 亚洲精品美女 | 国产精品久久久久久婷婷天堂 | 亚洲视频 视频在线 | 九色视频网址 | 欧美成人一区二区 | 亚洲精品乱码久久久久久9色 | 久久精品亚洲 | 亚洲国产精久久久久久久 | 免费国产视频 | 久久99久国产精品黄毛片入口 | 国产视频精品久久 | 国产精品露脸在线 | 91福利视频久久久久 | 亚洲国产日本 | 久久97久久 | 久久婷五月 | 在线免费av播放 | 成人免费大片黄在线播放 | 六月丁香婷婷在线 | 欧美亚洲国产一卡 | 天天天色综合a | 日韩激情视频在线观看 | 国产成人久久 | 五月天久久久久 | 蜜臀精品久久久久久蜜臀 | 亚洲成人动漫在线观看 | 天天综合亚洲 | 国产精品女同一区二区三区久久夜 | 日本中文在线 | 亚洲一级片免费观看 | 亚洲成av人片在线观看无 | 国产精品久久久久久久久久三级 | 久久视频一区二区 | 婷婷在线免费视频 | 2019免费中文字幕 | 色综合久久久久综合99 | 国产区精品区 | 亚洲午夜久久久久 | 91久久一区二区 | 婷婷激情综合 | 国产在线久草 | 精品国产电影一区二区 | 日韩视频免费观看高清 | 日韩一区二区在线免费观看 | 91精品高清| 激情欧美网| 国产黄色美女 | 成人动漫一区二区 | 国产精品久久一区二区无卡 | 国内精品视频免费 | 99久久国产免费免费 | 国产爽妇网 | 午夜精品麻豆 | 国产精品一区二区在线观看免费 | 国产亚洲日 | 久久久精华网 | 99久国产| 444av| 日韩理论电影在线观看 | 丁香综合五月 | 蜜臀久久99精品久久久久久网站 | 天天艹天天爽 | 国内久久久久久 | 亚洲国产中文字幕在线 | 六月婷婷网 | 国产精品国产三级国产专区53 | 亚洲国产成人精品在线观看 | 国产品久精国精产拍 | 亚洲午夜精品久久久久久久久 | 欧美激情视频三区 | 人人澡人人添人人爽一区二区 | 中国一级片视频 | 人人爽久久涩噜噜噜网站 | 中文字幕免费中文 | 亚洲香蕉在线观看 | 国产999久久久 | 国产成人一区二区三区在线观看 | 国产精品igao视频网网址 | 免费黄色av | 国产在线91在线电影 | 人人爽人人做 | 久久久夜色 | 日韩在线 | 一区二区三区在线观看中文字幕 | 色www永久免费 | 国产一卡久久电影永久 | 日韩免费一区二区 | 免费观看完整版无人区 | 国产精品专区一 | 香蕉97视频观看在线观看 | 日韩理论片在线 | 免费a网站| 天天天在线综合网 | 91麻豆国产福利在线观看 | 国产精品一区在线 | av网站在线免费观看 | 国产三级久久久 | 日韩精品影视 | 日韩av免费一区二区 | 国产精品久久久久久爽爽爽 | 久久这里有精品 | 中文字幕在线播放日韩 | 又黄又爽又刺激 | 丁香六月天| 中文字幕av免费观看 | av三级在线播放 | 久久国产香蕉视频 | av黄色在线 | 91精品视频观看 | 婷婷去俺也去六月色 | 成人黄色大片在线免费观看 | 国产电影黄色av | 日韩午夜剧场 | 成人在线观看日韩 | 美女福利视频 | 黄色官网在线观看 | 一级片黄色片网站 | 国产高清av免费在线观看 | 亚洲三级黄| 国产专区日韩专区 | 97精品国产91久久久久久久 | 精品电影一区二区 | 久久字幕网 | 深爱激情五月综合 | 在线观看国产中文字幕 | 国产精品精品国产 | 一区二区三区精品久久久 | 午夜在线免费视频 | 欧美日韩视频在线观看一区二区 | 日韩电影在线一区二区 | 久久久久久高潮国产精品视 | 欧美激情视频在线观看免费 | 在线99视频 | 国产中文字幕91 | 黄网站www | 色综合久久综合网 | 久久在线 | 免费视频资源 | 欧美视频18 | 国产精品久久99综合免费观看尤物 | 国产精品视频99 | 久久综合亚洲鲁鲁五月久久 | 免费视频二区 | 探花视频在线版播放免费观看 | 中文字幕电影在线 | 久久人91精品久久久久久不卡 | 人人澡澡人人 | a在线视频v视频 | 九九综合在线 | 国产中文字幕三区 | 国产黄色成人av | 日韩一级黄色av | 国产尤物一区二区三区 | 天天操天天干天天 | 97视频人人澡人人爽 | 成人a v视频 | 在线视频 日韩 | 久久国产欧美日韩精品 | 亚洲国产免费av | 一区二区三区精品在线视频 | 四虎影视成人永久免费观看视频 | 精品国产区在线 | 欧美午夜精品久久久久久浪潮 | 久久96 | 中文字幕在线观看第一区 | 久草资源在线观看 | 久久99精品一区二区三区三区 | 亚洲手机av | 黄色亚洲大片免费在线观看 | 国产精品久久久一区二区三区网站 | 四虎海外影库www4hu | 欧美日韩在线第一页 | 久久精品国产成人精品 | 黄色av影视 | 午夜天使 | 视频福利在线观看 | 日韩午夜精品 | 久久国产剧场电影 | 色偷偷888欧美精品久久久 | av看片网址 | 亚洲精品字幕在线观看 | 激情欧美丁香 | 91九色在线观看视频 | 亚洲精品99久久久久久 | 天天综合区 | 免费看污网站 | 国产一区二区三区免费在线观看 | 欧美亚洲国产一卡 | 国产精品久久综合 | 在线观看视频h | 1024手机看片国产 | 夜夜操网| 欧美一级xxxx| 精品视频久久久久久 | 中文字幕一区二区三 | 四虎成人精品永久免费av九九 | 超碰97在线人人 | 视频在线观看日韩 | 天天干天天上 | 久久女教师 | 婷婷色网 | 久久久久免费精品国产小说色大师 | 久久精品网站免费观看 | 亚洲综合成人婷婷小说 | 色偷偷888欧美精品久久久 | 亚州成人av在线 | 欧美精品乱码久久久久久 | 成年人视频在线观看免费 | 五月天六月婷 | av在线网站观看 | www.夜夜骑.com| 欧美色婷 | 中文字幕二区 | 久久久黄视频 | 精品视频资源站 | av成人免费在线 | 一区二区三区免费看 | 天天综合色 | 日韩欧美国产视频 | 免费中文字幕视频 | 精品在线亚洲视频 | 视频国产在线观看18 | 国产精品一区二区av | 欧美日韩国产亚洲乱码字幕 | 亚洲欧美视屏 | 91看片网址| 国产人成看黄久久久久久久久 | 国产精品久久久久9999吃药 | jizz18欧美18 | 婷婷六月天综合 | 日韩精品在线看 | av免费播放 | 九九九九九精品 | 国内丰满少妇猛烈精品播 | 在线观看视频中文字幕 | 九月婷婷色 | 五月婷婷视频在线观看 | 久久久久久久福利 | 久久影视一区 | 在线观看一 | 国产手机精品视频 | 日韩专区av| 91视频在线看 | 97视频在线观看视频免费视频 | 91精品系列 | 久久久免费精品国产一区二区 | 婷婷色在线视频 | 中文字幕一区二区在线播放 | 亚洲综合精品视频 | 欧美日韩另类在线观看 | 日韩欧美在线一区二区 | 天天操天天是 | 欧美一区二区视频97 | 视频在线在亚洲 | 国产高清在线看 | 99热这里只有精品国产首页 | 一区二区丝袜 | av电影免费观看 | 激情久久小说 | 又黄又刺激的视频 | 91视频91色| 久久视频这里有久久精品视频11 | 国产精品二区在线 | 91aaa在线观看| 在线а√天堂中文官网 | 久久免费在线视频 | 国内一区二区视频 | 久久久国产精品网站 | 久草在线免费看视频 | 精品a级片| 国产手机在线视频 | 免费在线观看av不卡 | 黄网站a | 国产亚洲在线视频 | 人人澡人摸人人添学生av | 久久超碰97 | 在线观看av的网站 | 亚洲蜜桃在线 | 婷婷六月丁香激情 | 欧美色图东方 | 亚洲综合干| 99久久精品国产毛片 | 青草视频网 | 国产 日韩 中文字幕 | 久久免费久久 | 欧美久久99 | 婷婷六月久久 | 久久精品精品电影网 | 日韩精品免费在线观看 | 天天操夜夜想 | 国产成人精品网站 | 天天人人 | 国产白浆在线观看 | 人人干人人搞 | 久草免费在线 | 午夜av在线免费 | 韩国av在线播放 | 欧美影院久久 | 欧美日韩国产二区三区 | 一区二区三区免费在线观看视频 | 九九色网| 一级片视频在线 | 欧美日韩一区二区三区在线观看视频 | 亚洲精品在线资源 | 欧美激情xxxx | 日韩午夜精品福利 | a成人v在线 | 国产精品视频免费观看 | 亚洲精品国偷拍自产在线观看 | 香蕉视频在线免费 | 波多野结依在线观看 | 少妇按摩av | 国产麻豆剧果冻传媒视频播放量 | 精品产品国产在线不卡 | 精品国产精品一区二区夜夜嗨 | 蜜桃av综合网 | www.伊人网| 亚洲人在线7777777精品 | 成人在线播放视频 | 色婷婷av在线| 一区三区视频 | 99精品欧美一区二区三区黑人哦 | 中文有码在线视频 | 日本午夜免费福利视频 | 毛片1000部免费看 | 国产精品久久久久永久免费观看 | 亚洲 欧美 另类人妖 | 国产精品免费不 | 欧美日韩视频在线一区 | 免费福利在线观看 | 国产一级性生活视频 | 91视频午夜 | 国产精品一区一区三区 | 亚洲高清视频在线观看免费 | 99高清视频有精品视频 | 91九色网站 | 国产一区精品在线 | 日韩精品不卡 | 日韩欧美国产成人 | 成人av片免费看 | 97视频播放 | 欧美精品免费在线观看 | 日韩天天干 | 午夜精品福利在线 | 亚洲精品一区二区三区新线路 | 中文字幕av在线播放 | 干亚洲少妇 | 天天操天天操天天 | 日韩色一区二区三区 | 日本久久久亚洲精品 | 伊人久久精品久久亚洲一区 | 狠狠的操| 国产精品对白一区二区三区 | www国产在线 | 91精品国产99久久久久久红楼 | 丁香激情网 | 久久电影国产免费久久电影 | 国产黄色片免费观看 | 日韩精品黄 | 五月天天色| 久久久久久久久久亚洲精品 | 国产成人一区二区三区在线观看 | 国产成人免费精品 | 欧美激情奇米色 | 国产高清小视频 | 免费久草视频 | 成人毛片网 | 美女黄濒 | 成人免费观看网址 | 亚洲精品视频网址 | 97在线视频网站 | 成人免费xxx在线观看 | 午夜av日韩| 亚洲精品乱码久久久久v最新版 | 99久热在线精品视频观看 | 亚洲成av人影片在线观看 | av日韩国产| 特级a老妇做爰全过程 | 五月亚洲 | 久久少妇免费视频 | 97精品伊人 | 99久久久久久 | 久久一区91 | 国产一级在线观看视频 | 亚洲黄色区 | 国产特级毛片 | 久一在线| 91免费版成人 | 91你懂的 | 亚洲黄色成人 | 91免费高清在线观看 | 精品国产一区二区三区久久 | 亚洲精品中文字幕视频 | 天天av资源| 成人精品999 | 久久久99久久| 国产视频亚洲视频 | 精品一区 在线 | 国产又粗又猛又色又黄网站 | 国产色爽| 欧美国产精品久久久久久免费 | 亚洲欧美日韩一二三区 | 久久精品视频免费播放 | 91在线入口 | 精品国产电影 | 综合网伊人 | 婷婷四房综合激情五月 | 视频在线一区二区三区 | 欧美精品一区二区在线观看 | 97人人精品 | 不卡电影免费在线播放一区 | 81国产精品久久久久久久久久 | 日本丶国产丶欧美色综合 | 毛片1000部免费看 | www.福利| 这里只有精品视频在线观看 | 在线免费观看国产 | 91高清免费观看 | 午夜精品一二三区 | 亚洲精品视频免费观看 | 国产成人精品午夜在线播放 | 91热这里只有精品 | 亚洲欧洲日韩 | 91九色视频在线观看 | 91精品国产91久久久久久三级 | 91中文字幕在线播放 | 日本中文字幕视频 | 久久这里| 三级黄在线 | 国产在线观看中文字幕 | 婷婷六月综合亚洲 | 日韩中文字幕免费在线观看 | 黄网站免费看 | 久草视频免费播放 | 国产精品自在线拍国产 | 免费在线观看一区二区三区 | 久久免费视频在线观看6 | 国产精品 中文字幕 亚洲 欧美 | 综合色婷婷 | 亚洲午夜电影网 | 美女搞黄国产视频网站 | 亚洲手机天堂 | 特级黄色片免费看 | 最新一区二区三区 | 免费观看一区二区 | 欧美日韩一区二区视频在线观看 | 伊人成人激情 | 日韩一区精品 | 日韩精品视频免费 | 亚洲国产精品女人久久久 | 欧美 日韩 性 | 亚洲精品乱码白浆高清久久久久久 | 黄色网在线免费观看 | 精品亚洲欧美一区 | 国产精品黑丝在线观看 | 一本一道久久a久久精品蜜桃 | 久草视频在线免费看 | 国产精品乱码久久久久久1区2区 | 99精品免费视频 | 99热最新 | 成人av在线直播 | 99视频在线免费观看 | 欧美视频在线观看免费网址 | 日韩欧美视频 | 午夜精品久久久99热福利 | 国产精品国产三级国产不产一地 | 欧美日韩综合在线 | 久久dvd| 久久激情小说 | 国产日韩欧美精品在线观看 | 九九视频在线观看视频6 | 丰满少妇久久久 | 亚洲高清av在线 | 久久精品中文字幕一区二区三区 | 欧美久草视频 | 成人黄色小说在线观看 | 国产不卡在线观看 | 亚洲激情婷婷 | 久久av免费| 91精品国产91 | 91色蜜桃| 亚洲最新精品 | 欧美做受高潮 | 人人添人人澡人人澡人人人爽 | 激情五月激情综合网 | 国产999免费视频 | 91免费观看视频网站 | 国产黄色精品 | 西西4444www大胆视频 | 国产精品va最新国产精品视频 | 国产成人一二三 | 日韩一区二区免费播放 | 国产伦理精品一区二区 | 日韩乱理| 国内精品久久久久久中文字幕 | 亚洲一级电影 | 欧美日韩久 | 国产色视频网站2 | 国产精品精品国产 | 久久久精品 一区二区三区 国产99视频在线观看 | 91精品国自产在线 | 久久久久久久影视 | 久草色在线观看 | 成人资源在线播放 | 91高清免费 | 在线播放亚洲 | 69精品 | 在线黄色观看 | 婷婷亚洲综合 | 亚洲国产日韩一区 | 91热这里只有精品 | 黄色av一区二区三区 | 九九热在线观看 | 国产精品久久久久久久7电影 | 国产精品久久久久久久久免费看 | 中文字幕在线视频国产 | 亚洲国产成人在线 | 亚洲人成在线观看 | 香蕉视频在线看 | 国产婷婷精品 | 国产免费亚洲高清 | 高清有码中文字幕 | 免费看片日韩 | 国产一区二区久久精品 | 国产一区视频在线播放 | 国产玖玖视频 | 91视频-88av| 久久第四色| 天天操天操 | 91精品国产欧美一区二区成人 | 日日夜夜91 | 女人18片| 成人av资源网站 | 亚洲精品理论 | 黄色三几片| 成人三级av | 欧美在线观看视频 | 人九九精品 | 射九九| 黄色av一区二区 | 黄色电影网站在线观看 | 视频 天天草 | 99成人在线视频 | 国产黄色av网站 | 99精品免费久久久久久久久日本 | 欧美福利久久 | 免费看亚洲毛片 | 国产69熟 | 四虎永久免费网站 | 中文字幕中文字幕在线中文字幕三区 | 96av麻豆蜜桃一区二区 | 一区二区三区www | 成人国产精品久久久 | 一级欧美一级日韩 | 九色91福利 | 奇米影视8888| 久久人人添人人爽添人人88v | 伊人永久在线 | 免费热情视频 | 激情综合电影网 | 成人av观看 | 久久av一区二区三区亚洲 | 久久男人中文字幕资源站 | 国产精品igao视频网入口 | 国产精品va在线观看入 | 狠狠干在线 | 午夜体验区| 日韩免费一二三区 | bbb搡bbb爽爽爽 | 玖玖在线视频观看 | 色婷婷综合久久久中文字幕 | 国产精品毛片一区二区 | 日本天天操 | 免费av网站在线看 | 成人av久久| 成人网页在线免费观看 | 日操操| 久久久久久美女 | 国产麻豆传媒 | 国产精品久久久久久久久蜜臀 | 欧美另类巨大 | 国产精品美女久久久久久网站 | 免费看污黄网站 | 91在线精品观看 | 亚洲黄色一级视频 | 天天艹天天干天天 | 成人av影视在线 | 久久久久久久久久久久影院 | 欧美国产亚洲精品久久久8v | av日韩国产 | 黄色软件视频大全免费下载 | 国产精品18p | 久久视频这里有久久精品视频11 | 国产在线国偷精品产拍免费yy | 国产精品乱码久久久久久1区2区 | 中日韩欧美精彩视频 | 中文字幕丰满人伦在线 | 国产女人40精品一区毛片视频 | 国产最新在线 | 99国产成+人+综合+亚洲 欧美 | 欧美成a人片在线观看久 | 国产免费资源 | 亚洲日本va午夜在线影院 | 国产成人黄色 | 亚洲精品成人免费 | 丰满少妇在线观看资源站 | 天天伊人网 | 中文字幕在线观看一区二区三区 | free,性欧美 九九交易行官网 | 激情综合网色播五月 | 九草在线视频 | 精品国产伦一区二区三区观看体验 | 怡红院成人在线 | 婷婷av电影| 色综合久久88色综合天天人守婷 | 欧美日韩视频网站 | 亚洲精品视频中文字幕 | 国产一区福利在线 | 国产精品 999 | 国产一区二区精品在线 | 视频一区二区在线观看 | 国产亚洲精品久久久久久移动网络 | 在线观看免费版高清版 | 有码视频在线观看 | 深夜福利视频一区二区 | 亚洲精品色 | 少妇视频一区 | 一本一道久久a久久精品蜜桃 | 国产999精品久久久 免费a网站 | 久久久国产成人 | 精品uu | 国精产品999国精产 久久久久 | 免费看成年人 | 久久亚洲区| 摸bbb搡bbb搡bbbb | 超碰在线公开免费 | 久久久高清一区二区三区 | 狠狠的操狠狠的干 | www色综合 | 五月天婷婷在线观看视频 | 中文字幕第一页在线vr | 日韩亚洲国产中文字幕 | 久草国产在线观看 | 免费男女网站 | 在线中文日韩 | 日日夜夜网 | 97视频在线观看成人 | 亚洲高清网站 | 黄色一二级片 | 黄色毛片一级 | www.在线观看av| 激情动态 | 日韩久久精品一区二区三区下载 | 青草视频免费观看 | 午夜精品久久久久久久久久久久久久 | 亚洲女欲精品久久久久久久18 | 国产精品美女在线观看 | 在线a人片免费观看视频 | 久久久久免费精品视频 |