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

S.l.e!ep.¢%

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

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

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

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

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

根據(jù)上面所述的步驟和協(xié)議內(nèi)容,就可以實現(xiàn)SOCK5代理了。下面我給出我寫的實現(xiàn)SOCKT5代理的函數(shù)代碼和注釋,供參考(delphi6+win2K+sp4調(diào)試通過,代理服務(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));
?
????
// 連接遠程主機
???? 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ā)送驗證信息
????????re?: = ?send(sock ^ ,?buffer,?len,? 0 );
????????
if ?re? = ?SOCKET_ERROR?then
????????begin
??????????Result?:
= ? 1 ;
??????????Exit;
????????end;
?
????????
// 接收驗證返回信息
????????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ù)中有一個FproxyParam變量,它是代理參數(shù)的值對象,聲明如下:
??TProxyParam?
= ? class
??
private
????FUsername,????????
// 代理驗證用戶名
????FPassword,???????? // 代理驗證密碼
????FServer:?String;???? // 代理服務(wù)器地址
????FPort:?Integer;????? // 代理服務(wù)器端口號
????FIsValid:?Boolean;?? // 是否驗證?????如果代理服務(wù)器是驗證的,那么此值應(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)建了一個ClientSocket1(TclientSocket對象),它的IP和Port設(shè)置為代理服務(wù)器的IP和Port,那么就有下面的代碼:
......
Var
Re:Integer;
Begin
Re:
= SetProxy(@(ClientSocket.Socket.SocketHandle))?;?? // 如果驗證成功,那么就可以用返回的//socket進行相應(yīng)的通訊
If?Re = 0 ?then?
Begn
??ShowMessage(‘Sock5?is?ok’);?????????
// 代理服務(wù)器就會有連接的數(shù)據(jù)流顯示
End
Else?begin
??ShowMessage(‘Sock5?is?error’);
End;
End;
……
上面的例子如果設(shè)置代理成功,那么代理服務(wù)器就會有連接的數(shù)據(jù)流顯示。表示與代理服務(wù)器有數(shù)據(jù)交換,如果沒有成功則務(wù)數(shù)據(jù)流顯示。
?
?
?????????????????????????????????????????????????????????????? 李孟巖
????????????????????????????????????????????????????????????????????? mengyan_yl@sohu.com
??????????????????????????????????????????????????????????????????????????????????? 2005-07-05實現(xiàn)Sock5代理

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   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>
            午夜在线观看免费一区| 午夜精品福利一区二区三区av | 亚洲国产欧美不卡在线观看| 在线免费日韩片| 一区二区三区久久| 久久亚洲综合色| 一区二区三区欧美激情| 乱中年女人伦av一区二区| 国产精品一区在线播放| 亚洲精品一区二区三区樱花| 久久久精品国产免大香伊| 亚洲精品乱码视频| 久热精品视频| 伊人久久综合| 久久精品一区二区国产| 久久亚洲一区| 一区二区三区在线观看欧美| 欧美专区亚洲专区| 亚洲一二三四区| 国产精品成人播放| 亚洲手机视频| 日韩视频在线一区二区| 欧美精品日韩www.p站| 亚洲大片av| 一个人看的www久久| 国户精品久久久久久久久久久不卡 | 欧美精品v日韩精品v国产精品| 中文精品视频一区二区在线观看| 午夜亚洲伦理| 国产乱码精品一区二区三区忘忧草 | 久久综合九色综合欧美狠狠| 一本色道久久综合亚洲精品婷婷| 欧美成人精品1314www| 久久久欧美一区二区| 免费观看国产成人| 久久综合999| 欧美日韩成人在线视频| 日韩视频免费观看高清在线视频| 另类成人小视频在线| 久久精品欧美日韩精品| 欲色影视综合吧| 夜夜爽99久久国产综合精品女不卡| 欧美日韩视频一区二区| 一区二区三区偷拍| 久久久91精品国产| 亚洲欧美综合一区| 欧美精品v日韩精品v韩国精品v | 亚洲欧美一区二区三区极速播放| 久久综合成人精品亚洲另类欧美| 欧美一区免费| 久久黄金**| 亚洲人体影院| 亚洲精品在线观| 国产麻豆成人精品| 亚洲日本欧美在线| 亚洲激情二区| 亚洲尤物在线| 亚洲激情在线视频| 久久亚洲春色中文字幕久久久| 欧美一激情一区二区三区| 欧美日韩性视频在线| 亚洲国产婷婷| 亚洲精品一二三| 欧美国产日韩亚洲一区| 欧美一级夜夜爽| 国产精品女主播一区二区三区| 快射av在线播放一区| 激情成人在线视频| 另类人畜视频在线| 午夜国产一区| 亚洲国产三级| 欧美freesex交免费视频| 先锋a资源在线看亚洲| 国产精品久久久一本精品| 在线中文字幕一区| 亚洲国产婷婷综合在线精品 | 久久综合色8888| 欧美顶级大胆免费视频| 国产精品欧美久久| 久久三级视频| 国产精品久久久久77777| 亚洲一区二区三区精品在线观看| 欧美亚洲一区三区| 黄色av成人| 亚洲欧美日韩国产综合精品二区| 午夜久久tv| 一区视频在线看| 欧美成人一区二免费视频软件| 久久久久国产精品www| 亚洲高清久久久| 久久精品一区二区三区四区| 欧美高清视频在线观看| 亚洲午夜精品在线| 欧美精选午夜久久久乱码6080| 亚洲国产高清一区| 亚洲人成久久| 亚洲欧美日韩系列| 欧美深夜福利| 亚洲日本久久| 欧美一区二区视频免费观看| 激情久久五月天| 国产精品av免费在线观看| 亚洲另类自拍| 可以看av的网站久久看| 一区二区三区四区五区视频| 国内精品久久久久伊人av| 欧美另类高清视频在线| 欧美中文在线视频| 久久亚洲色图| 亚洲无限av看| 亚洲高清123| 国产日本欧洲亚洲| 久久久精品动漫| 日韩午夜av| 欧美韩日视频| 一区二区精品在线| 一区二区视频欧美| 国产精品入口日韩视频大尺度| 免费不卡在线观看| 欧美在现视频| 亚洲欧美日韩国产成人| 91久久午夜| 香蕉久久夜色| 一区二区三区精品在线| 亚洲激情二区| 伊人狠狠色j香婷婷综合| 国产欧美在线播放| 欧美日韩亚洲一区二区三区| 久久免费午夜影院| 欧美中文字幕不卡| 欧美有码在线视频| 欧美一级艳片视频免费观看| 欧美成人一区二区三区片免费 | 国内精品一区二区三区| 国产欧美一区二区三区国产幕精品| 欧美日韩伊人| 欧美日韩视频在线一区二区 | 亚洲国产美女久久久久| 国产综合色产在线精品| 国产亚洲美州欧州综合国| 免费久久99精品国产| 久久精品人人做人人爽| 久久精品夜色噜噜亚洲aⅴ| 香蕉久久精品日日躁夜夜躁| 亚洲欧美国产精品va在线观看| 欧美激情一区二区三区| 欧美高清视频一区二区| 亚洲国产岛国毛片在线| 久久久99精品免费观看不卡| 欧美在线免费一级片| 久久精品99久久香蕉国产色戒| 日韩一区二区免费高清| 国产亚洲精品综合一区91| 国产一区二区在线免费观看| 国产一区二区三区在线观看网站| 韩国福利一区| 亚洲国产精品免费| 艳女tv在线观看国产一区| 亚洲视频免费| 欧美影院精品一区| 久久综合一区二区| 亚洲国产成人精品视频| 亚洲伦理精品| 亚洲欧美综合网| 麻豆av一区二区三区| 欧美精品三级日韩久久| 亚洲承认在线| 一本色道久久综合一区| 性欧美8khd高清极品| 久久深夜福利免费观看| 亚洲二区三区四区| 999亚洲国产精| 欧美在线二区| 欧美精品一二三| 国产视频观看一区| 国产精品大片wwwwww| 国产亚洲一区二区三区| 亚洲人成人一区二区三区| 亚洲欧美日韩一区二区在线| 另类图片国产| 日韩一级黄色大片| 久久黄色小说| 欧美图区在线视频| 亚洲大片av| 欧美在线网址| 91久久久亚洲精品| 欧美一区二区三区精品| 欧美日本亚洲视频| 伊人久久成人| 西瓜成人精品人成网站| 亚洲国产精品va在线观看黑人| 亚洲一区二区三区四区五区黄| 久久夜色精品国产欧美乱极品| 国产精品www994| 日韩天堂在线视频| 免播放器亚洲一区| 午夜精品久久一牛影视| 欧美午夜国产| 一本色道久久综合亚洲精品小说| 毛片一区二区|