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

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開(kāi)心的工作
簡(jiǎn)單、開(kāi)放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
有很多公司不能直接和Internet相連,必須通過(guò)代理和www連接,瀏覽、下載資料。
代理服務(wù)器支持的協(xié)議也有所不同,有支持Sock、HTTP代理的這樣我們做的客戶端軟件就需要支持這些代理,使用戶能夠通過(guò)這些代理透過(guò)防火墻和外網(wǎng)相連,一般Sock分為Sock4和Sock5,這里我們只實(shí)現(xiàn)Sock5協(xié)議。
RFC1928描述了Socks協(xié)議的細(xì)節(jié),告訴我們客戶程序如何同Socks代理協(xié)商,取得透過(guò)該協(xié)議對(duì)外傳輸?shù)耐緩健S⑽牡腢RL為:http://www.ietf.org/rfc/rfc1928.txt,建議先了解以上鏈接內(nèi)容后在閱讀下文。另外給大家推薦學(xué)習(xí)協(xié)議的好地方:http://www.cnpaf.com中國(guó)協(xié)議分析網(wǎng),有很多好東東,可以去看看。
下面說(shuō)明一下實(shí)現(xiàn)的方法。
代理的實(shí)現(xiàn)方法實(shí)際就是Socket編程,只要通訊時(shí)遵循它們的協(xié)議就可以。首先理解它們的協(xié)議是關(guān)鍵。
示意圖:

1.1??? Sock5協(xié)議實(shí)現(xiàn)

1.1.1??????? Sock5協(xié)議內(nèi)容

1.? 客戶端首先要與代理服務(wù)器連接,連接后要向代理發(fā)送版本號(hào)、認(rèn)證方法、方法選擇格式如下:
版本號(hào)(1字節(jié)) |? 供選擇的認(rèn)證方法(1字節(jié)) ?|? 方法序列(1-255個(gè)字節(jié)長(zhǎng)度)
如果你支持的版本為SOCK5那么版本號(hào)就為0x05;可供選擇的方法是指你的協(xié)議支持幾種認(rèn)證方式,因?yàn)槲覀儗?shí)現(xiàn)只支持一種所以就填0x01,如果你是兩種就寫(xiě)0x02;認(rèn)證方法序列包括(0x00為不需認(rèn)證、0x02為需要用戶名和密碼認(rèn)證,通常是這兩種,如果想了解更多請(qǐng)參看Rfc1928)。
這樣組合你的報(bào)文應(yīng)該為:0x05 0x01 0x00
如果需要認(rèn)證那么為:0x05 0x01 0x02
2.? 代理接收到客戶端的請(qǐng)求,會(huì)向客戶端返回信息,格式為:
版本號(hào) | 服務(wù)器選定的方法
如果服務(wù)器支持驗(yàn)證方式,返回的報(bào)文為:
0x05 0x02
3.? 接下來(lái)根據(jù)服務(wù)器的驗(yàn)證方式,發(fā)送驗(yàn)證信息了,報(bào)文格式為:
0x01 | 用戶名長(zhǎng)度(1字節(jié))| 用戶名(長(zhǎng)度根據(jù)用戶名長(zhǎng)度域指定) | 口令長(zhǎng)度(1字節(jié)) | 口令(長(zhǎng)度由口令長(zhǎng)度域指定)
4.? 服務(wù)器接收信息后進(jìn)行驗(yàn)證,返回如下格式:
0x01 | 驗(yàn)證結(jié)果標(biāo)志
驗(yàn)證結(jié)果標(biāo)志:0x00表示驗(yàn)證成功,其他值均為錯(cuò)誤碼

1.1.2??????? Sock5協(xié)議實(shí)現(xiàn)

根據(jù)上面所述的步驟和協(xié)議內(nèi)容,就可以實(shí)現(xiàn)SOCK5代理了。下面我給出我寫(xiě)的實(shí)現(xiàn)SOCKT5代理的函數(shù)代碼和注釋,供參考(delphi6+win2K+sp4調(diào)試通過(guò),代理服務(wù)器用的是CCProxy6.0)
function?TBZSock5ProxyApi.SetProxy(ASocket:?Pointer):?Integer;
var
??proxyUser,?proxyPwd:?String;
??bIsValid:?Boolean;
??sock:?
^ TSocket;
??sockServer:?TSockAddrIn;
??command:?array?[
0 .. 9 ]?of?Byte;
??re,?len,?ulen,?plen:?Integer;
// ??buffer:?PByte;
??buffer:?array?[ 0 .. 1023 ]?of?Byte;
begin
??sock?:
= ?ASocket;
??
if ?FProxyParam.GetServer? = ? '' ?then
??begin
????Result?:
= ? 0 ;
????Exit;
??end
??
else
??begin
????Result?:
= ? 0 ;
????sock
^ ?: = ?socket(AF_INET,?SOCK_STREAM,? 0 );
????
if ?sock ^ ? = ?INVALID_SOCKET?then
????begin
??????Result?:
= ? 1 ;
??????Exit;
????end;
?
????sockServer.sin_family?:
= ?AF_INET;
????sockServer.sin_port?:
= ?htons(FProxyParam.GetPort);???? // 將整形數(shù)變?yōu)榫W(wǎng)絡(luò)字節(jié)流
????sockServer.sin_addr.S_addr?: = ?inet_addr(PChar(FProxyParam.GetServer));
?
????
// 連接遠(yuǎn)程主機(jī)
???? if ?WinSock.connect(sock ^ ,?sockServer,?SizeOf(sockServer))? <> ? 0 ?then
????begin
??????Result?:
= ? 1 ;
??????Exit;
????end;
?
????bIsValid?:
= ?FProxyParam.GetProxyValid;
?
????
// 發(fā)送SOCK5協(xié)議指令
????FillChar(command,? 10 ,? 0 );
????command[
0 ]?: = ? 5 ;
????
if ?bIsValid?then
??????command[
1 ]?: = ? 2
????
else
??????command[
1 ]?: = ? 1 ;
????
if ?bIsValid?then
??????command[
2 ]?: = ? 2
????
else
??????command[
2 ]?: = ? 0 ;
?
????
// 發(fā)送登陸指令
???? if ?bIsValid?then
??????re?:
= ?WinSock.send(sock ^ ,?command,? 4 ,? 0 )
????
else
??????re?:
= ?WinSock.send(sock ^ ,?command,? 3 ,? 0 );
????
if ?re? = ?SOCKET_ERROR?then
????begin
??????Result?:
= ? 1 ;
??????Exit;
????end;
?
????
// 接收返回的消息
????fillchar(command,? 10 ,? 0 );????????????????????????? // 接收前用0再次填充
????re?: = ?WinSock.recv(sock ^ ,?command,? 2 ,? 0 );
????
if ?re? <> ? 2 ?then
????begin
??????Result?:
= ? 1 ;
??????Exit;
????end;
????
if ?command[ 1 ] = $FF?then
????begin
??????Result?:
= ? 1 ;
??????Exit;
????end;
?
????
if ?(not?bIsValid)?and?(command[ 1 ] = 0 )?then
????begin
??????Exit;
????end;
?
????proxyUser?:
= ?FProxyParam.GetUsername;
????proxyPwd?:
= ?FProxyParam.GetPassword;
?
????
if ?command[ 1 ]? <> ? 0 ?then
????begin
??????
if ?command[ 1 ]? <> ? 2 ?then
??????begin
????????Result?:
= ? 1 ;
????????Exit;
??????end;
??????
if ?bIsValid?then
??????begin
????????ulen?:
= ?Length(proxyUser);
????????plen?:
= ?Length(proxyPwd);
????????len?:
= ? 3 ? + ?ulen? + ?plen;
????????fillchar(buffer,?
1024 ,? 0 );
?
????????buffer[
0 ]?: = ? 5 ;
????????buffer[
1 ]?: = ?ulen;
????????StrPCopy(@buffer[
2 ],?proxyuser);
????????buffer[
2 ? + ?ulen]?: = ?plen;
????????StrPCopy(@buffer[
2 ? + ?ulen? + ? 1 ],?proxyPwd);
?
????????
// 發(fā)送驗(yàn)證信息
????????re?: = ?send(sock ^ ,?buffer,?len,? 0 );
????????
if ?re? = ?SOCKET_ERROR?then
????????begin
??????????Result?:
= ? 1 ;
??????????Exit;
????????end;
?
????????
// 接收驗(yàn)證返回信息
????????fillchar(command,? 10 ,? 0 );
????????re?:
= ?recv(sock ^ ,?command,? 2 ,? 0 );
????????
if ?((re <> 2 )?or?((command[ 0 ] <> 1 )?and?(command[ 1 ] <> 0 ?)))?then
????????begin
??????????Result?:
= ? 1 ;
??????????Exit;
????????end;
??????end???
// if?bisValid
?????? else
??????begin
????????Result?:
= ? 1 ;
????????Exit;
??????end;?????????????????????
//
????end;? // ?if?command[1]<>0
??end;?? // end?first?if
?
end;
上面的函數(shù)中有一個(gè)FproxyParam變量,它是代理參數(shù)的值對(duì)象,聲明如下:
??TProxyParam?
= ? class
??
private
????FUsername,????????
// 代理驗(yàn)證用戶名
????FPassword,???????? // 代理驗(yàn)證密碼
????FServer:?String;???? // 代理服務(wù)器地址
????FPort:?Integer;????? // 代理服務(wù)器端口號(hào)
????FIsValid:?Boolean;?? // 是否驗(yàn)證?????如果代理服務(wù)器是驗(yàn)證的,那么此值應(yīng)該為true
?
????procedure?Clear;
??
public
????constructor?Create;
????procedure?SetUsername(AUsername:?String);
????procedure?SetPassword(APassword:?String);
????procedure?SetServer(AServer:?String);
????procedure?SetPort(APort:?Integer);
????procedure?SetProxyValid(AValid:?Boolean);
?
????function?GetUsername:?String;
????function?GetPassword:?String;
????function?GetServer:?String;
????function?GetPort:?Integer;
????function?GetProxyValid:?Boolean;
??end;
使用此函數(shù):
假設(shè)已經(jīng)創(chuàng)建了一個(gè)ClientSocket1(TclientSocket對(duì)象),它的IP和Port設(shè)置為代理服務(wù)器的IP和Port,那么就有下面的代碼:
......
Var
Re:Integer;
Begin
Re:
= SetProxy(@(ClientSocket.Socket.SocketHandle))?;?? // 如果驗(yàn)證成功,那么就可以用返回的//socket進(jìn)行相應(yīng)的通訊
If?Re = 0 ?then?
Begn
??ShowMessage(‘Sock5?is?ok’);?????????
// 代理服務(wù)器就會(huì)有連接的數(shù)據(jù)流顯示
End
Else?begin
??ShowMessage(‘Sock5?is?error’);
End;
End;
……
上面的例子如果設(shè)置代理成功,那么代理服務(wù)器就會(huì)有連接的數(shù)據(jù)流顯示。表示與代理服務(wù)器有數(shù)據(jù)交換,如果沒(méi)有成功則務(wù)數(shù)據(jù)流顯示。
?
?
?????????????????????????????????????????????????????????????? 李孟巖
????????????????????????????????????????????????????????????????????? mengyan_yl@sohu.com
??????????????????????????????????????????????????????????????????????????????????? 2005-07-05實(shí)現(xiàn)Sock5代理

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美成人精品h版在线观看| 蜜臀av国产精品久久久久| 久久精品国产91精品亚洲| 91久久线看在观草草青青| 国产欧美韩日| 欧美三级欧美一级| 欧美激情精品久久久久久变态| 久久精品国产69国产精品亚洲| 亚洲综合999| 一区二区三区精品| 亚洲裸体视频| 亚洲精品久久久久中文字幕欢迎你 | 激情久久影院| 一本色道久久综合亚洲精品按摩| 午夜精品久久久久久久99黑人| 99精品99久久久久久宅男| 亚洲国产第一页| 亚洲第一精品福利| 一区视频在线播放| 国产女人aaa级久久久级| 国产精品久久午夜夜伦鲁鲁| 欧美午夜激情在线| 欧美屁股在线| 欧美日韩亚洲精品内裤| 欧美另类人妖| 欧美日产在线观看| 欧美日韩你懂的| 欧美色图麻豆| 欧美性猛交xxxx免费看久久久| 欧美色一级片| 国产精品人成在线观看免费 | 国产精品第一区| 国产精品久久久久久久久搜平片| 国产精品久久久91| 国产精品丝袜91| 国产色产综合色产在线视频| 国产亚洲欧美日韩一区二区| 韩国三级在线一区| 亚洲国产成人高清精品| 最新亚洲视频| 亚洲视频在线一区观看| 午夜一级久久| 久久综合色天天久久综合图片| 美女图片一区二区| 亚洲二区精品| 99国产精品久久久久老师| 亚洲一区二区欧美| 久久福利一区| 欧美激情性爽国产精品17p| 欧美日韩在线视频一区二区| 国产欧美日韩一级| 亚洲第一页中文字幕| 亚洲美女中文字幕| 亚洲欧美精品中文字幕在线| 久久久噜噜噜| 亚洲国产高清在线| 亚洲系列中文字幕| 久久蜜桃资源一区二区老牛 | 老司机精品视频网站| 欧美久久视频| 国产精品影视天天线| 在线看片欧美| 亚洲综合第一页| 鲁大师成人一区二区三区| 日韩视频不卡| 欧美中文字幕在线播放| 欧美国产日产韩国视频| 国产精品大片| 在线观看欧美日本| 亚洲一级片在线观看| 久久综合给合| 一区二区三区视频在线播放| 久久久久久亚洲精品杨幂换脸| 欧美日韩美女一区二区| 国内成人自拍视频| 制服丝袜亚洲播放| 久久最新视频| 亚洲天堂av电影| 欧美成人精精品一区二区频| 国产精品入口夜色视频大尺度 | 久久久人成影片一区二区三区观看 | 性欧美video另类hd性玩具| 欧美成年人视频| 国产日韩欧美一区在线| 一本色道久久88综合日韩精品| 久久久国产精品一区二区三区| 亚洲伦理中文字幕| 久久免费精品日本久久中文字幕| 亚洲一区在线直播| 美女免费视频一区| 国产精品永久免费观看| 亚洲精品日日夜夜| 久久另类ts人妖一区二区| 亚洲精品一二| 快射av在线播放一区| 国产九区一区在线| 亚洲香蕉视频| 亚洲国产精品一区| 久久国产精品黑丝| 国产精品入口日韩视频大尺度| 99精品99| 亚洲福利在线看| 久久久久久综合网天天| 国产精品视频免费观看| 一本色道久久综合亚洲二区三区| 女人香蕉久久**毛片精品| 欧美在线视频免费观看| 国产精品亚洲综合久久| 亚洲天堂视频在线观看| 亚洲国产另类精品专区| 久久亚裔精品欧美| 国一区二区在线观看| 久久爱91午夜羞羞| 亚洲一区在线观看免费观看电影高清| 欧美日韩你懂的| 一本色道久久综合一区| 亚洲国产99| 免费欧美网站| 亚洲国产婷婷综合在线精品 | 亚洲欧美视频| 99re6热只有精品免费观看| 欧美精品久久一区二区| 亚洲精品一区二区三区蜜桃久| 免费影视亚洲| 老司机午夜精品| 亚洲黄网站黄| 欧美国产视频日韩| 久久这里只有精品视频首页| 在线精品高清中文字幕| 免费成人黄色av| 免费一级欧美在线大片| 亚洲电影免费观看高清完整版在线 | 久久人体大胆视频| 一区二区在线不卡| 免费日韩成人| 男同欧美伦乱| 亚洲精品孕妇| 99精品国产热久久91蜜凸| 欧美调教vk| 香港久久久电影| 性色一区二区三区| 国内成+人亚洲| 欧美xart系列在线观看| 男男成人高潮片免费网站| 亚洲精品日韩精品| 亚洲免费电影在线| 国产精品国产a| 欧美在线一二三| 久久久99爱| 亚洲日本欧美日韩高观看| 亚洲精品久久久久| 国产精品久久久久久一区二区三区| 性久久久久久久| 欧美一区观看| 亚洲黄色成人| 亚洲美女视频在线观看| 国产精品毛片大码女人| 久久久久久伊人| 欧美a一区二区| 亚洲影视九九影院在线观看| 久久成人一区| 亚洲黄色在线| 亚洲视频在线观看三级| 国产在线欧美日韩| 亚洲国产精品传媒在线观看| 欧美色图麻豆| 久久综合国产精品| 欧美久久婷婷综合色| 欧美影片第一页| 久久婷婷综合激情| 亚洲性av在线| 久久久国产精品一区二区三区| 亚洲欧洲综合另类| 亚洲视频欧美视频| 在线观看欧美日本| 一级日韩一区在线观看| 国内精品久久久久久久影视蜜臀| 亚洲国产精品激情在线观看| 国产精品综合久久久| 亚洲第一天堂av| 国产免费亚洲高清| 国产精品99久久久久久人| 欧美.www| 欧美一级片一区| 欧美aⅴ一区二区三区视频| 香蕉视频成人在线观看| 麻豆91精品| 性娇小13――14欧美| 你懂的网址国产 欧美| 欧美在线1区| 欧美久久久久免费| 久久综合伊人| 国产精品免费电影| 亚洲国产91精品在线观看| 国产偷自视频区视频一区二区| 亚洲国产成人在线视频| 国产一区二区三区日韩| 正在播放日韩| 日韩一级在线| 久久影视精品|