コード例 #1
0
ファイル: Main.cs プロジェクト: Sehyn/AivyCore
        private int _onConnect(IntPtr socket, IntPtr address, int addrSize)
        {
            var structure = Marshal.PtrToStructure <sockaddr_in>(address);
            var ipAddress = new IPAddress(structure.sin_addr.S_addr);
            var port      = structure.sin_port;

            if (_interface.LocalPortWhiteList().Contains(htons(port)) &&
                ipAddress.ToString() is string str_ip &&
                (str_ip == "127.0.0.1" || str_ip == "0.0.0.0" || str_ip == "")) // if local
            {
                return(connect(socket, address, addrSize));
            }

            _interface.Message($"Connection attempt at {ipAddress}:{htons(port)}, redirecting to 127.0.0.1:{_redirectionPort}...");

            _interface.IpRedirected(new IPEndPoint(ipAddress, htons(port)), Process.GetCurrentProcess().Id, _redirectionPort);

            var strucPtr = Marshal.AllocHGlobal(addrSize);
            var struc    = new sockaddr_in
            {
                sin_addr   = { S_addr = inet_addr("127.0.0.1") },
                sin_port   = htons(_redirectionPort),
                sin_family = (short)AddressFamily.InterNetworkv4,
            };

            Marshal.StructureToPtr(struc, strucPtr, true);
            return(connect(socket, strucPtr, addrSize));
        }
コード例 #2
0
        private int _onConnect(IntPtr s, IntPtr sockAddr, int addrsize)
        {
            //lock (wSockLock)
            //{

            //    // retrieve remote ip
            //    sockaddr_in structure = (sockaddr_in)Marshal.PtrToStructure(sockAddr, typeof(sockaddr_in));
            //    string remoteIp = new System.Net.IPAddress(structure.sin_addr.S_addr).ToString();
            //    ushort remotePort = ntohs(structure.sin_port);
            //    HookManager.Log("Ip: " + remoteIp + " Port: " + remotePort.ToString() + " Addrsize: " + addrsize);
            //    if (true)
            //    {

            //        // connect to socks5 server
            //        //IntPtr test = CreateAddr(proxyIp,proxyPort.ToString());
            //        SetAddr(sockAddr, "191.101.89.189", "45786");

            //        IntPtr val = CreateAddr("191.101.89.189", "45786");

            //        var result = connect(s, val, addrsize);

            //        _interface.IpRedirected(new IPEndPoint(new IPAddress(structure.sin_addr.S_addr), htons(structure.sin_port)), Process.GetCurrentProcess().Id, _redirectionPort);

            //        var strucPtr = Marshal.AllocHGlobal(addrsize);
            //        var struc = new sockaddr_in
            //        {
            //            sin_addr = { S_addr = inet_addr(_interface.GetRedirectedIp()) },
            //            sin_port = htons(_redirectionPort),
            //            sin_family = (short)AddressFamily.InterNetworkv4,
            //        };

            //        Marshal.StructureToPtr(struc, strucPtr, true);
            //        return connect(s, strucPtr, addrsize);

            //        // send socks 5 request
            //        IntPtr socksProtocolRequest = SetUpSocks5Request();

            //        result = -1;
            //        while (result == -1)
            //        {
            //            result = send(s, socksProtocolRequest, 4, 0);
            //            var errorcode = WSAGetLastError();
            //            if (errorcode != WSAENOTCONN && errorcode != WSANOERROR)
            //            {
            //                HookManager.Log("Send failed, Error: + " + errorcode);
            //                return -1;
            //            }
            //            Thread.Sleep(1);
            //        }


            //        // retrieve server repsonse
            //        var response = IntPtr.Zero;
            //        while (response == IntPtr.Zero)
            //        {
            //            response = Recieve(s, 2);
            //            var errorcode = WSAGetLastError();
            //            if (errorcode != WSAEWOULDBLOCK && errorcode != WSANOERROR)
            //            {
            //                HookManager.Log("Recieve FAILED response == IntPtr.Zero! Lasterror: " + errorcode.ToString());
            //                return -1;
            //            }
            //            Thread.Sleep(1);
            //        }

            //        byte[] recvBytes = new byte[2] { Marshal.ReadByte(response), Marshal.ReadByte(response, 1) };
            //        if (recvBytes[1] == 255)
            //        {
            //            HookManager.Log("No authentication method was accepted by the proxy server");
            //            return -1;
            //        }
            //        if (recvBytes[0] != 5)
            //        {
            //            HookManager.Log("No SOCKS5 proxy");
            //            return -1;
            //        }

            //        // if auth request response, send authenicate request
            //        if (recvBytes[1] == 2)
            //        {
            //            int length = 0;
            //            var authenticateRequest = SetUpAuthenticateRequest("Seldylcrel", "V7a2EkY", out length);
            //            result = -1;
            //            while (result == -1)
            //            {
            //                result = send(s, authenticateRequest, length, 0);
            //                var errorcode = WSAGetLastError();
            //                if (errorcode != WSAENOTCONN && errorcode != WSANOERROR)
            //                {
            //                    HookManager.Log("Send failed, Error: + " + errorcode);
            //                    return -1;
            //                }
            //                Thread.Sleep(1);
            //            }


            //            response = IntPtr.Zero;
            //            while (response == IntPtr.Zero)
            //            {
            //                response = Recieve(s, 2);
            //                var errorcode = WSAGetLastError();
            //                if (errorcode != WSAEWOULDBLOCK && errorcode != WSANOERROR)
            //                {
            //                    HookManager.Log("Recieve FAILED response == IntPtr.Zero! Lasterror: " + errorcode.ToString());
            //                    return -1;
            //                }
            //                Thread.Sleep(1);
            //            }

            //            recvBytes = new byte[2] { Marshal.ReadByte(response), Marshal.ReadByte(response, 1) };
            //            if (recvBytes[1] != 0)
            //            {
            //                //HookManager.Log("Proxy: incorrect username/password");
            //                HookManager.Log("Proxy: incorrect username/password");
            //                return -1;
            //            }
            //        }

            //        // request bind with server
            //        var bindRequest = SetUpBindWithRemoteHost(remoteIp, remotePort);
            //        result = -1;
            //        while (result == -1)
            //        {
            //            result = send(s, bindRequest, 10, 0);
            //            var errorcode = WSAGetLastError();
            //            if (errorcode != WSAENOTCONN && errorcode != WSANOERROR)
            //            {
            //                HookManager.Log("Send failed (bindRequest), Error: + " + errorcode);
            //                return -1;
            //            }
            //            Thread.Sleep(1);
            //        }


            //        // bind response
            //        response = IntPtr.Zero;
            //        while (response == IntPtr.Zero)
            //        {
            //            response = Recieve(s, 10);
            //            var errorcode = WSAGetLastError();
            //            if (errorcode != WSAEWOULDBLOCK && errorcode != WSANOERROR)
            //            {
            //                HookManager.Log("Recieve FAILED response == IntPtr.Zero! Lasterror: " + errorcode.ToString());
            //                return -1;
            //            }
            //            Thread.Sleep(1);
            //        }


            //        if (!VerifyBindResponse(response))
            //        {
            //            HookManager.Log("VerifyBindResponse failed!");
            //            return -1;
            //        }

            //        // success
            //        WSASetLastError(0);
            //        SetLastError(0);

            //        // clean memory
            //        foreach (var ptr in allocatedMemory)
            //            Marshal.FreeHGlobal(ptr);

            //        allocatedMemory.Clear();
            //        return 0;


            //    }
            //    else
            //    {

            //        return connect(s, sockAddr, addrsize);
            //    }

            //}
            var structure = Marshal.PtrToStructure <sockaddr_in>(sockAddr);
            var ipAddress = new IPAddress(structure.sin_addr.S_addr);
            var port      = structure.sin_port;

            if (ipAddress.ToString() is string str_ip &&
                (str_ip == "127.0.0.1" || str_ip == "0.0.0.0" || str_ip == "")) // if local
            {
                return(connect(s, sockAddr, addrsize));
            }

            //_interface.Message($"Connection attempt at {ipAddress}:{htons(port)}, redirecting to 127.0.0.1:{_redirectionPort}...");

            _interface.IpRedirected(new IPEndPoint(ipAddress, htons(port)), Process.GetCurrentProcess().Id, _redirectionPort);

            var strucPtr = Marshal.AllocHGlobal(addrsize);
            var struc    = new sockaddr_in
            {
                sin_addr   = { S_addr = inet_addr(_interface.GetRedirectedIp()) },
                sin_port   = htons(_redirectionPort),
                sin_family = (short)AddressFamily.InterNetworkv4,
            };

            Marshal.StructureToPtr(struc, strucPtr, true);
            return(connect(s, strucPtr, addrsize));
        }