· 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服務器會根據源地址和目的地址來分析請求,然後根據請求類型返回一個或多個應答。
ATYP字段中描述了地址字段(DST.ADDR,BND.ADDR)所包含的地址類型:
· X'01'
基於IPV4的IP地址,4個字節長
· X'03'
基於域名的地址,地址字段中的第一字節是以字節為單位的該域名的長度,沒有結尾的NUL字節。
· X'04'
基於IPV6的IP地址,16個字節長。
Variable表示該域的長度是可變的。
以最常用的IP表示法為例,加入我們的代理服務器地址是10.10.1.254,現在我們要通過代理服務器訪問192.168.1.2這個IP地址,這裡不要看做局域網地址,因為是通過代理進行訪問的,
前期傳遞了IP對象IPEndPoint destIP;
byte [] data = new byte[10];
data[0]=5;data[1]=1;data[2]=0;data[3]=1;//前4個字節
Array.Copy(destIP.Address.GetAddressBytes(), 0, data, 4, 4); //IP地址
Array.Copy(BitConverter.GetBytes(
IPAddress.HostToNetworkOrder(destIP.Port)), 2, data, 8, 2); //端口號