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)); }
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 (!_whitelist.Contains(ipAddress)) { return(connect(socket, address, addrSize)); } _interface.Message($"Connection attempt at {ipAddress}:{port}, redirecting to 127.0.0.1:{_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)); }