add pac server
This commit is contained in:
@@ -149,13 +149,13 @@ namespace shadowsocks_csharp.Encrypt
|
||||
|
||||
}
|
||||
|
||||
if (_encryptCtx != IntPtr.Zero)
|
||||
if (_encryptCtx.ToInt64() != 0)
|
||||
{
|
||||
OpenSSL.EVP_CIPHER_CTX_cleanup(_encryptCtx);
|
||||
OpenSSL.EVP_CIPHER_CTX_free(_encryptCtx);
|
||||
_encryptCtx = IntPtr.Zero;
|
||||
}
|
||||
if (_decryptCtx != IntPtr.Zero)
|
||||
}
|
||||
if (_decryptCtx.ToInt64() != 0)
|
||||
{
|
||||
OpenSSL.EVP_CIPHER_CTX_cleanup(_decryptCtx);
|
||||
OpenSSL.EVP_CIPHER_CTX_free(_decryptCtx);
|
||||
|
||||
@@ -11,6 +11,7 @@ namespace shadowsocks_csharp
|
||||
public partial class Form1 : Form
|
||||
{
|
||||
Local local;
|
||||
PACServer pacServer;
|
||||
Config config;
|
||||
|
||||
public Form1()
|
||||
@@ -45,6 +46,8 @@ namespace shadowsocks_csharp
|
||||
this.Hide();
|
||||
}));
|
||||
}
|
||||
pacServer = new PACServer();
|
||||
pacServer.Start();
|
||||
}
|
||||
|
||||
private void reload(Config config)
|
||||
|
||||
@@ -144,7 +144,17 @@ namespace shadowsocks_csharp
|
||||
|
||||
public void Close()
|
||||
{
|
||||
connection.Shutdown(SocketShutdown.Send);
|
||||
if (connection != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
connection.Shutdown(SocketShutdown.Send);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.ToString());
|
||||
}
|
||||
}
|
||||
if (remote != null)
|
||||
{
|
||||
try
|
||||
@@ -198,9 +208,14 @@ namespace shadowsocks_csharp
|
||||
{
|
||||
int bytesRead = connection.EndReceive(ar);
|
||||
|
||||
if (bytesRead > 0)
|
||||
if (bytesRead > 1)
|
||||
{
|
||||
byte[] response = { 5, 0 };
|
||||
if (connetionRecvBuffer[0] != 5)
|
||||
{
|
||||
// reject socks 4
|
||||
response = new byte[]{ 0, 91 };
|
||||
}
|
||||
connection.BeginSend(response, 0, response.Length, 0, new AsyncCallback(handshakeSendCallback), null);
|
||||
}
|
||||
else
|
||||
|
||||
Executable
+89
@@ -0,0 +1,89 @@
|
||||
using shadowsocks_csharp.Properties;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
|
||||
namespace shadowsocks_csharp
|
||||
{
|
||||
class PACServer
|
||||
{
|
||||
Socket listener;
|
||||
public void Start()
|
||||
{
|
||||
// Create a TCP/IP socket.
|
||||
listener = new Socket(AddressFamily.InterNetwork,
|
||||
SocketType.Stream, ProtocolType.Tcp);
|
||||
IPEndPoint localEndPoint = new IPEndPoint(0, 8090);
|
||||
|
||||
// Bind the socket to the local endpoint and listen for incoming connections.
|
||||
listener.Bind(localEndPoint);
|
||||
listener.Listen(100);
|
||||
|
||||
listener.BeginAccept(
|
||||
new AsyncCallback(AcceptCallback),
|
||||
listener);
|
||||
}
|
||||
|
||||
|
||||
public void AcceptCallback(IAsyncResult ar)
|
||||
{
|
||||
try
|
||||
{
|
||||
Socket listener = (Socket)ar.AsyncState;
|
||||
listener.BeginAccept(
|
||||
new AsyncCallback(AcceptCallback),
|
||||
listener);
|
||||
Socket conn = listener.EndAccept(ar);
|
||||
|
||||
conn.BeginReceive(new byte[1024], 0, 256, 0,
|
||||
new AsyncCallback(receiveCallback), conn);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private void receiveCallback(IAsyncResult ar)
|
||||
{
|
||||
Socket conn = (Socket)ar.AsyncState;
|
||||
try
|
||||
{
|
||||
int bytesRead = conn.EndReceive(ar);
|
||||
|
||||
string pac = Resources.proxy_pac;
|
||||
|
||||
if (bytesRead > 0)
|
||||
{
|
||||
string text = String.Format(@"HTTP/1.1 200 OK
|
||||
Server: Shadowsocks
|
||||
Content-Type: application/x-ns-proxy-autoconfig
|
||||
Content-Length: {0}
|
||||
Connection: Close
|
||||
|
||||
", System.Text.Encoding.UTF8.GetBytes(pac).Length) + pac;
|
||||
byte[] response = System.Text.Encoding.UTF8.GetBytes(text);
|
||||
conn.BeginSend(response, 0, response.Length, 0, new AsyncCallback(sendCallback), conn);
|
||||
}
|
||||
else
|
||||
{
|
||||
conn.Close();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.ToString());
|
||||
conn.Close();
|
||||
}
|
||||
}
|
||||
|
||||
private void sendCallback(IAsyncResult ar)
|
||||
{
|
||||
Socket conn = (Socket)ar.AsyncState;
|
||||
conn.Shutdown(SocketShutdown.Send);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+33
-1
@@ -1,7 +1,7 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.17929
|
||||
// Runtime Version:4.0.30319.18444
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
@@ -59,5 +59,37 @@ namespace shadowsocks_csharp.Properties {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to // Generated by gfwlist2pac
|
||||
///// https://github.com/clowwindy/gfwlist2pac
|
||||
///
|
||||
///var domains = {
|
||||
/// "gimpshop.com": 1,
|
||||
/// "directcreative.com": 1,
|
||||
/// "speedpluss.org": 1,
|
||||
/// "mingpaovan.com": 1,
|
||||
/// "wikinews.org": 1,
|
||||
/// "joachims.org": 1,
|
||||
/// "maiio.net": 1,
|
||||
/// "idv.tw": 1,
|
||||
/// "mail-archive.com": 1,
|
||||
/// "surfeasy.com.au": 1,
|
||||
/// "hihistory.net": 1,
|
||||
/// "alexlur.org": 1,
|
||||
/// "finalion.jp": 1,
|
||||
/// "nrk.no": 1,
|
||||
/// "nyt.com": 1,
|
||||
/// "cmule.com": 1,
|
||||
/// "gappp.org": 1,
|
||||
/// "givemesomethingtoread.com": 1,
|
||||
/// "yahoo.com.tw": 1,
|
||||
/// [rest of string was truncated]";.
|
||||
/// </summary>
|
||||
internal static string proxy_pac {
|
||||
get {
|
||||
return ResourceManager.GetString("proxy_pac", resourceCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
@@ -60,6 +60,7 @@
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
@@ -68,9 +69,10 @@
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
@@ -85,9 +87,10 @@
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
@@ -114,4 +117,8 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="proxy_pac" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\proxy.pac.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
</root>
|
||||
Executable
+2504
File diff suppressed because it is too large
Load Diff
@@ -87,6 +87,7 @@
|
||||
<Compile Include="Encrypt\OpensslEncryptor.cs" />
|
||||
<Compile Include="Encrypt\TableEncryptor.cs" />
|
||||
<Compile Include="Encrypt\IEncryptor.cs" />
|
||||
<Compile Include="PACServer.cs" />
|
||||
<Compile Include="RC4.cs" />
|
||||
<Compile Include="Config.cs" />
|
||||
<Compile Include="Form1.cs">
|
||||
@@ -126,6 +127,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="icon144.ico" />
|
||||
<None Include="proxy.pac.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
|
||||
|
||||
Reference in New Issue
Block a user