青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

focus on linux, c/c++, lua

sock代理服務(wù)原理(TCP穿透)[轉(zhuǎn)載]

sock代理分為sock4代理和 sock5代理。sock4支持TCP(事實(shí)僅支持TCP),無需用戶名、密碼驗(yàn)證;sock5支持TCP和UDP,根據(jù)代理服務(wù)器設(shè)置是否需要用戶名、密碼認(rèn)證。TCP和UDP代理工作原理產(chǎn)不多,UDP代理網(wǎng)上多的是,google一下即可。這里只講TCP代理工作原理。
sock代理工作原理大致如下:
1。[需要代理方]向服務(wù)器發(fā)出請(qǐng)求信息;
2。[代理方]應(yīng)答;
3。[需要代理方]接到應(yīng)答后發(fā)送向[代理方]發(fā)送目的ip和端口;
4。[代理方]與目的連接;
5。[代理方]將[需要代理方]發(fā)出的信息傳到目的方,將目的方發(fā)出的信息傳到[需要代理方];
6。代理完成。
下面對(duì)sock4和sock5的代理工作原理流程分別詳細(xì)說明,并給出示例代碼。
sock4的TCP代理工作流程:
1。我們首先還是連接服務(wù)器,然后發(fā)送數(shù)據(jù)給服務(wù)器。由于是無用戶密碼驗(yàn)證,我們需要發(fā)送9個(gè)字節(jié)的數(shù)據(jù),展開寫為 04 01 + 目標(biāo)端口(2字節(jié)) + 目標(biāo)IP(4字節(jié)) + 00,其中目標(biāo)端口和目標(biāo)IP就是我們真正要連接的服務(wù)器端口和服務(wù)器地址;
2。代理服務(wù)器返回8字節(jié)的數(shù)據(jù),我們只要判斷第二字節(jié)是否為90即可,若是90連接成功,否則失敗.剩下的操作和不存在代理服務(wù)器一樣,可直接用發(fā)送\接受數(shù)據(jù)。
sock5的TCP代理工作流程:
1。向服務(wù)器的代理端口建立tcp連接。一般為1080;
2。向服務(wù)器發(fā)送  05 02 00 02(此為16進(jìn)制碼,以下同),讓代理服務(wù)器選擇認(rèn)證方式 ;
     05
     02 這里確認(rèn)2種認(rèn)證方式 無需認(rèn)證和需要認(rèn)證,只需要驗(yàn)證一種方式,可以直接發(fā)送05 01 00查詢服務(wù)器是否支持無認(rèn)證代理方式;
     00 不需要認(rèn)證;
     02 需要認(rèn)證;
3。如果接到 05 00 則是可以代理或則05 02需要認(rèn)證,這里只需要判斷第二字節(jié)就行;
     如果需要認(rèn)證,需要向服務(wù)器發(fā)送01 用戶名長度(2字節(jié))用戶名 密碼長度(2字節(jié))密碼,然后接收服務(wù)器返回?cái)?shù)據(jù),如果第二字節(jié)為   00,則認(rèn)證通過,否則無法認(rèn)證,則連接失敗;
4。發(fā)送 05 01 00 01 + 目的地址(4字節(jié))+ 目的端口(2字節(jié)),目的地址和端口都是16進(jìn)制碼(不是字符串)。
     例202.103.190.27 - 7201
     則發(fā)送的信息為:05 01 00 01 CA 67 BE 1B 1C 21
     (CA=202 67=103 BE=190 1B=27 1C21=7201)
5。接收代理服務(wù)器返回的數(shù)據(jù),我們只要判斷第二字節(jié)是否為00即表示代理連接完成;
6。以后操作和直接與目的方進(jìn)行TCP連接相同。

//代理服務(wù)器登錄
CString g_proxyserver = "";
int  g_proxyport = 1080;
CString g_proxyuser 
= "";
CString g_proxypwd 
= "";
int  g_proxyid = 3;  //2 - sock4代理 3 - sock5代理
char server_name[100]= {0};  //真正的服務(wù)器地址
int  server_port=8000;   //真正的服務(wù)器端口
SOCKET ConnecToProxyServer()
{
 SOCKADDR_IN ToAddr;
 SOCKET m_hSocketpop 
= socket(AF_INET, SOCK_STREAM ,0);  // SOCK_DGRAM;
 memset(&ToAddr, 0sizeof(ToAddr));
 ToAddr.sin_family 
= AF_INET;
 ToAddr.sin_addr.s_addr 
= inet_addr(g_proxyserver);//這是我的SOCKS服務(wù)器
 ToAddr.sin_port = htons(g_proxyport); 
 
int retErr = connect(m_hSocketpop,(SOCKADDR*)&ToAddr,sizeof(ToAddr));
 
if(retErr == SOCKET_ERROR)
 
{
  closesocket(m_hSocketpop);
  
return -1;
 }

 
char buf[100= {0};
 
if(g_proxyid == 3//sock5 代理方式
 {
  
// 讓PROXY選擇認(rèn)證方法
  buf[0= 0x05;
  buf[
1= 0x02//確認(rèn)2種認(rèn)證方式 無需認(rèn)證和需要認(rèn)證
  buf[2= 0x00// 無需認(rèn)證
  buf[3= 0x02// 需要認(rèn)證
  if(send(m_hSocketpop,(const far char*)buf,4,0== SOCKET_ERROR)
  
{
   closesocket(m_hSocketpop);
   
return -1;
  }

  Sleep(
100);
  
if(recv(m_hSocketpop,buf,10,0== SOCKET_ERROR)
  
{
   closesocket(m_hSocketpop);
   
return -1;
  }

  
if(buf[1== 0x02)
  
{//需要認(rèn)證
   char userStr[128= {0};
   userStr[
0]=0x01;
   userStr[
1]=g_proxyuser.GetLength();
   strcpy(userStr
+2,g_proxyuser);
   userStr[
2+g_proxyuser.GetLength()]=g_proxypwd.GetLength();
   strcpy(userStr
+3+g_proxyuser.GetLength(),g_proxypwd);
   
int result=send(m_hSocketpop,userStr,strlen(userStr), 0);
   
if(result == SOCKET_ERROR)
   
{
    closesocket(m_hSocketpop);
    
return -1;
   }

   Sleep(
100);
   
char validateChar[2= {1};
   result
=recv(m_hSocketpop,validateChar,20);
   
if(result == SOCKET_ERROR)
   
{
    closesocket(m_hSocketpop);
    
return -1;
   }

   
if(validateChar[1]!='\x00')
   
{//認(rèn)證失敗
    closesocket(m_hSocketpop);
    
return -1;
   }

  }

  
// 向PROXY服務(wù)器發(fā)送CONNECT 請(qǐng)求,
  memset(buf, 0100);
  buf[
0= 0x05;
  buf[
1= 0x01// connection request.
  buf[2= 0x00// reserved!
  buf[3= 0x01// address type:Ip V4 ;
  *((ULONG*)(buf+4))=inet_addr(server_name);
  
*((USHORT*)(buf+8))=htons(server_port);
  
if(send(m_hSocketpop,(const far char*)buf,10,0== SOCKET_ERROR)
  
{
   closesocket(m_hSocketpop);
   
return -1;
  }

  Sleep(
100);
  
// 接收PROXY服務(wù)器返回的REPLY
  memset(buf, 1100);
  
if(recv(m_hSocketpop,buf, 20,0== SOCKET_ERROR)
  
{
   closesocket(m_hSocketpop);
   
return -1;
  }

  
if(buf[1!= 0// 只有當(dāng)?shù)诙€(gè)字節(jié)為0時(shí),才表示成功。
  {
//   printf("Cannot connect to the remote server!\n");
   closesocket(m_hSocketpop);
   
return -1;
  }

//  theApp.m_ClientSocket.Attach(m_hSocketpop);
 }

 
if(g_proxyid == 2//sock4 代理方式
 {
  
int result;
  memset(buf, 
0100);
  buf[
0= 0x04;
  buf[
1= 0x01// connection request.
  *((USHORT*)(buf+2))=htons(server_port);
  
*((ULONG*)(buf+4))=inet_addr(server_name);
  buf[
8= 0x00;
  result 
= send(m_hSocketpop, (const far char*)buf, 90);
  
if(result == SOCKET_ERROR)
  
{
   closesocket(m_hSocketpop);
   
return -1;
  }

  Sleep(
100);
  
char EchoStr[10];
  memset(EchoStr,
0,10);
  result
=recv(m_hSocketpop,EchoStr,80);
  
if(result == SOCKET_ERROR)
  
{
   closesocket(m_hSocketpop);
   
return -1;
  }

  
if(EchoStr[1!= 90)
  
{
   closesocket(m_hSocketpop);
   
return -1;
  }

//  theApp.m_ClientSocket.Attach(m_hSocketpop);
 }

 
return m_hSocketpop;
}

調(diào)用方式:
  strcpy(server_name, theApp.m_ServerIP);
  server_port 
= 8080;
  SOCKET m_socket 
= ConnecToProxyServer();
  
if(m_socket == -1)
  
{
        
return 0;
  }

  
int type = 1000;
  send(m_socket, (
char*)&type, sizeof(int), 0);


SOCK5如何用代理UDP連接

1。向服務(wù)器的1080端口建立tcp連接

2。向服務(wù)器發(fā)送 05 01 00

3。如果接到 05 00 則是可以代理

4。發(fā)送 05 03 00 01 00 00 00 00 + 本地UDP端口(2字節(jié))

5。服務(wù)器返回 05 00 00 01 +服務(wù)器地址+端口

7.需要申請(qǐng)方發(fā)送
00 00 00 01 +目的地址IP(4字節(jié))+目的端口 +所要發(fā)送的信息

8。當(dāng)有數(shù)據(jù)報(bào)返回時(shí)
向需要代理方發(fā)出00 00 00 01 +來源地址IP(4字節(jié))+來源端口 +接受的信息
 
使用sock5代理時(shí)TCP數(shù)據(jù):
客戶端   sock5服務(wù)器
SYN
   ACKSYN
ACK
05 01 00 00 00 00
   05 00 00 00 00 00
05 01 00 03 0E 31 39 32 2E 31 36 38 2E 37 35 2E 31 31 34 00 6E (.....192.168.75.114.n)
   05 00 00 01 C0 A8 4D 56 08 D4
ACK
   +OK X1 NT-POP3 Server iflytek.com (IMail 8.15 228888-9)..
USER hjma..
   +OK send your password..
PASS xxxxxxx..
   +OK maildrop locked and ready..
STAT..
   +OK 0 0..
QUIT..
   +OK POP3 Server saying Good-Bye..
ACKFIN
   ACK
   ACKFIN
ACK  

posted on 2010-06-08 13:36 zuhd 閱讀(7140) 評(píng)論(0)  編輯 收藏 引用 所屬分類: c/c++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            美女黄色成人网| 一本到高清视频免费精品| 黄色一区二区三区| 欧美激情第3页| 欧美一区二区三区四区视频| 日韩一级片网址| 女人色偷偷aa久久天堂| 日韩视频不卡中文| 免费欧美在线视频| 免费日韩av电影| 欧美刺激午夜性久久久久久久| 亚洲国产第一| 亚洲午夜精品一区二区三区他趣| 亚洲男人的天堂在线观看| 欧美日韩喷水| 午夜精品久久久久| 黄色成人在线免费| 欧美视频专区一二在线观看| 在线综合亚洲| 蜜桃av噜噜一区| 一本久久知道综合久久| 在线观看91精品国产麻豆| 欧美成人免费全部| 欧美日韩国产在线看| 黄色小说综合网站| 亚洲另类一区二区| 性xx色xx综合久久久xx| 亚洲国产精品123| 欧美吻胸吃奶大尺度电影| 久久国产日韩| 国产精品99久久久久久有的能看| 亚洲女爱视频在线| 亚洲国产日韩欧美在线动漫| 国产偷久久久精品专区| 久久久国产精品一区二区中文 | 亚洲欧美视频在线观看视频| 欧美成人在线影院| 久久久美女艺术照精彩视频福利播放| 亚洲国产精品久久久久婷婷884 | 国产精品入口夜色视频大尺度 | 一区二区激情视频| 韩国三级电影一区二区| 亚洲美女黄网| 亚洲人成网站精品片在线观看| 欧美精品一区二区三区蜜桃 | 欧美精品在欧美一区二区少妇| 欧美三级午夜理伦三级中文幕| 精品动漫一区| 久久精品国产一区二区电影| 在线一区二区三区四区五区| 久久久久**毛片大全| 久久国产婷婷国产香蕉| 亚洲人成网站在线观看播放| 精品成人一区二区| 久久精品女人天堂| 宅男噜噜噜66一区二区66| 欧美激情精品久久久久久| 99www免费人成精品| 久久婷婷久久| 麻豆精品在线视频| 欧美韩日一区| 久久久免费av| 久久综合亚州| 欧美国产一区二区在线观看 | 久久久久久综合网天天| 国产精品入口日韩视频大尺度| 亚洲精选视频在线| 在线观看欧美| 久久久www| 亚洲小少妇裸体bbw| 亚洲毛片在线| 欧美日韩免费在线视频| 一区二区日韩伦理片| 亚洲国产欧美一区二区三区久久 | 亚洲免费在线视频一区 二区| 一区二区欧美日韩| 久久激情五月丁香伊人| 国产九色精品成人porny| 狠狠色综合网站久久久久久久| 欧美亚洲自偷自偷| 性娇小13――14欧美| 久久亚洲综合| 国产精品av免费在线观看| 一区二区三区四区在线| 一区二区三区国产在线观看| 久久成人18免费网站| 欧美体内谢she精2性欧美| 一级日韩一区在线观看| 亚洲中无吗在线| 一区免费视频| 亚洲啪啪91| 国产精品成人国产乱一区 | 91久久精品国产| 亚洲精品三级| 国产精品永久| 欧美高清一区| 国产精品久久二区| 久久影音先锋| 欧美日韩亚洲不卡| 久久久噜噜噜| 欧美屁股在线| 看片网站欧美日韩| 欧美日韩一区三区四区| 久久久久欧美精品| 欧美日韩国产电影| 媚黑女一区二区| 国产精品看片你懂得| 一本久久精品一区二区| 午夜精品99久久免费| 亚洲成人直播| 久久麻豆一区二区| 欧美精品一区二| 亚洲丰满在线| 亚洲婷婷在线| 亚洲美女在线视频| 久久国产精品久久久久久| 在线综合欧美| 亚洲午夜免费视频| 欧美欧美午夜aⅴ在线观看| 欧美在线免费视屏| 欧美日韩另类国产亚洲欧美一级| 久久综合九色综合欧美就去吻| 国产精品成人观看视频免费| 欧美福利一区二区| 精品999网站| 亚洲欧美视频| 亚洲欧美日韩国产中文 | 亚洲欧美国产视频| 亚洲二区在线观看| 久久国产黑丝| 欧美自拍偷拍| 国产精品日韩| 9人人澡人人爽人人精品| 亚洲人成网站色ww在线| 狼人社综合社区| 蜜臀va亚洲va欧美va天堂 | 久久精品国产2020观看福利| 夜夜嗨av一区二区三区网页| 免费欧美高清视频| 欧美激情综合| 亚洲人午夜精品免费| 久久国产精品一区二区三区四区| 欧美一区二区三区视频在线观看 | 99视频精品免费观看| 日韩亚洲欧美一区二区三区| 欧美电影在线| 亚洲激情亚洲| 一区二区三区.www| 亚洲欧美日韩综合一区| 欧美日韩在线三区| 亚洲视频欧洲视频| 欧美一区免费| 国产一区二区三区丝袜 | 亚洲欧美日本精品| 欧美日韩在线播| 在线亚洲电影| 亚洲欧美综合网| 国产日韩欧美电影在线观看| 午夜精品福利一区二区三区av| 欧美在线免费视频| 亚洲电影观看| 欧美伦理91i| 亚洲午夜高清视频| 久久亚洲私人国产精品va| 亚洲成色777777在线观看影院| 欧美成人精精品一区二区频| 亚洲精品日韩在线观看| 亚洲欧美制服另类日韩| 极品av少妇一区二区| 欧美国产免费| 亚洲欧美日韩精品一区二区| 久久一区二区三区四区| 一区二区不卡在线视频 午夜欧美不卡在| 欧美日韩一区二区三区在线看 | 欧美人与禽猛交乱配| 亚洲视频网站在线观看| 老司机精品福利视频| 亚洲深夜福利网站| 久久久久久久一区二区| 亚洲区欧美区| 亚洲精品乱码久久久久久蜜桃91| 亚洲欧美视频在线| 欧美国产第一页| 国产精品一区二区黑丝| 欧美在线综合| 欧美影院在线| 亚洲精品久久| 国产一区二区三区四区三区四| 欧美成熟视频| 久久九九99| 亚洲午夜精品福利| 亚洲大胆人体在线| 亚洲高清中文字幕| 国产精品自在欧美一区| 欧美大尺度在线| 欧美伊人影院| 亚洲先锋成人| 艳女tv在线观看国产一区| 欧美成人在线免费视频| 久久亚洲欧美|