9-06 1,589 views
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace TyphoonSocksClientCsharp
{
class Socks5ProxyDemo
{
public static void func()
{
// 首先与本地 socks代理 建立连接
var proxyAddr = "127.0.0.1:3000";
var proxyIp = proxyAddr.Split(':')[0];
var proxyPort = int.Parse(proxyAddr.Split(':')[1]);
var client = new TcpClient(proxyIp, proxyPort);
Console.WriteLine("Connected to proxy: {0} at port: {1}", proxyIp, proxyPort);
// // socks5相关协议,@see http://www.faqs.org/rfcs/rfc1928.html
var connection = client.GetStream();
var writer = new BinaryWriter(connection);
var reader = new BinaryReader(connection);
writer.Write(new byte[] { 0x05, 0x01, 0x00 });
var response = reader.ReadBytes(2);
if (response[1] != 0x00)
throw new WebException("Proxy doesn't support connection without authentication.");
writer.Write(new byte[] { 0x05, 0x01, 0x00, 0x01 });
// socks5代理建立完成
// 开始访问真正的目的服务器
var ip = "115.29.53.33";
foreach (var part in ip.Split('.'))
writer.Write(byte.Parse(part));
var port = 80;
writer.Write(IntToNetworkByteOrder(port));
response = reader.ReadBytes(10);
var errorCode = response[1];
if (errorCode != 0)
throw new WebException("Connection to proxy failed. Errorcode " + errorCode);
// 通过socks5代理连接访问目的主机成功
Console.WriteLine("Connected to target over proxy.");
}
private static byte[] IntToNetworkByteOrder(int port)
{
var hb = port / 256;
var lb = port % 256;
return new byte[] { (byte)hb, (byte)lb };
}
}
}
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace tcpsocks5
{
static class Program
{
static void ReadAll(this NetworkStream stream, byte[] buffer, int offset, int size)
{
while (size != 0) {
var read = stream.Read(buffer, offset, size);
if (read < 0) {
throw new IOException("Premature end");
}
size -= read;
offset += read;
}
}
static void Main(string[] args)
{
using (var client = new TcpClient()) {
client.Connect(ip, port); // Provide IP, Port yourself
using (var stream = client.GetStream()) {
// Auth
var buf = new byte[300];
buf[0] = 0x05; // Version
buf[1] = 0x01; // NMETHODS
buf[2] = 0x00; // No auth-method
stream.Write(buf, 0, 3);
stream.ReadAll(buf, 0, 2);
if (buf[0] != 0x05) {
throw new IOException("Invalid Socks Version");
}
if (buf[1] == 0xff) {
throw new IOException("Socks Server does not support no-auth");
}
if (buf[1] != 0x00) {
throw new Exception("Socks Server did choose bogus auth");
}
// Request
buf[0] = 0x05; // Version
buf[1] = 0x01; // Connect (TCP)
buf[2] = 0x00; // Reserved
buf[3] = 0x03; // Dest.Addr: Domain name
var domain = Encoding.ASCII.GetBytes("google.com");
buf[4] = (byte)domain.Length; // Domain name length (octet)
Array.Copy(domain, 0, buf, 5, domain.Length);
var port = BitConverter.GetBytes(
IPAddress.HostToNetworkOrder((short)80));
buf[5 + domain.Length] = port[0];
buf[6 + domain.Length] = port[1];
stream.Write(buf, 0, domain.Length + 7);
// Reply
stream.ReadAll(buf, 0, 4);
if (buf[0] != 0x05) {
throw new IOException("Invalid Socks Version");
}
if (buf[1] != 0x00) {
throw new IOException(string.Format("Socks Error {0:X}", buf[1]));
}
var rdest = string.Empty;
switch (buf[3]) {
case 0x01: // IPv4
stream.ReadAll(buf, 0, 4);
var v4 = BitConverter.ToUInt32(buf, 0);
rdest = new IPAddress(v4).ToString();
break;
case 0x03: // Domain name
stream.ReadAll(buf, 0, 1);
if (buf[0] == 0xff) {
throw new IOException("Invalid Domain Name");
}
stream.ReadAll(buf, 1, buf[0]);
rdest = Encoding.ASCII.GetString(buf, 1, buf[0]);
break;
case 0x04: // IPv6
var octets = new byte[16];
stream.ReadAll(octets, 0, 16);
rdest = new IPAddress(octets).ToString();
break;
default:
throw new IOException("Invalid Address type");
}
stream.ReadAll(buf, 0, 2);
var rport = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(buf, 0));
Console.WriteLine("Connected via {0}:{1}", rdest, rport);
// Make an HTTP request, aka. "do stuff ..."
using (var writer = new StreamWriter(stream)) {
writer.Write("GET / HTTP/1.1\r\nHost: google.com\r\n\r\n");
writer.Flush();
using (var reader = new StreamReader(stream)) {
while (true) {
var line = reader.ReadLine();
if (string.IsNullOrEmpty(line)) {
break;
}
}
}
}
}
}
}
}
}
Мы предоставляем очень качественные услуги прокси-серверов пакетами. Вам требуется неизменный частный прокси для работы в Instagram, Вконтакте,Однокласниках или Авито? Вы интересуетесь букмекерскими ставками или покером? SEO,SMM, просто безопасный серфинг или другие цели? В том случае вы по нужному адресу.
Мы готовы предоставить анонимные, элитные, прокси-сервера с надежной круглосуточной поддержкой. Все наши прокси могут применяться для любых программ,сервисов, социальных сетей, онлайн игр и не только. Авторизация по логин – паролю или IP адресу.
Быстрые прокси ipv4 и ipv6 (до 100 мбит/с) обеспечат стабильную работу. Необходимы разные подсети, у нас их достаточно. Так же вы можете выбрать тип протокола HTTP/SOCKS.
купить качественные прокси