📄 socks5.cs
字号:
namespace Imps.Client.CommLayer.SocksSipConnection
{
using Imps.Client.Resource;
using System;
using System.Net.Sockets;
internal sealed class Socks5 : SocksBase
{
public Socks5(SocksSipConnectionOption option) : base(option)
{
}
protected override void ConsultToProxy(string host, int port)
{
try
{
QueryMethodSocks5Message message;
if (base.Option.UserName.Length == 0)
{
SocksMethod[] methods = new SocksMethod[1];
message = new QueryMethodSocks5Message(methods);
}
else
{
SocksMethod[] methodArray2 = new SocksMethod[2];
methodArray2[1] = SocksMethod.Password;
message = new QueryMethodSocks5Message(methodArray2);
}
ReplyQueryMethodSocks5Message message2 = ReplyQueryMethodSocks5Message.Parse(base.SendSocksMessage(message));
if (message2.Method == SocksMethod.Password)
{
string username = base.Option.UserName;
string password = base.Option.Password;
PasswordMethodSocks5Message message3 = new PasswordMethodSocks5Message(username, password);
if (!ReplyPasswordMethodSocks5Message.Parse(base.SendSocksMessage(message3)).IsSuccessed)
{
throw new SocksConnectionException("用户名不存在或密码错误", SocksConnectionErrorCode.PasswordError);
}
}
else if (message2.Method != SocksMethod.NoAuth)
{
throw new SocksConnectionException("代理服务器不支持用户名/密码验证方式", SocksConnectionErrorCode.PasswordAuthNotSupported);
}
ConnectToServerSocks5Message message5 = new ConnectToServerSocks5Message(host, port);
if (!ReplyRequirmentSocks5Message.Parse(base.SendSocksMessage(message5)).IsSuccessed)
{
throw new SocksConnectionException("代理服务器与最终服务器的连接失败", SocksConnectionErrorCode.ServerFailure);
}
base.RaiseConnectedEvent();
}
catch (SocketException exception)
{
base.RaiseFailedEvent(new SocksConnectionException("在协商过程中出现错误", exception, SocksConnectionErrorCode.ServerFailure));
}
catch (SocksConnectionException exception2)
{
base.RaiseFailedEvent(exception2);
}
catch (Exception exception3)
{
base.RaiseFailedEvent(new SocksConnectionException("与代理服务器的协商过程失败", exception3, SocksConnectionErrorCode.ServerFailure));
}
}
public override string ToString()
{
return StringTable.ClientCommLayerString.Socks5Proxy;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -