C#UDP代理/管道

C#UDP代理/管道,c#,.net,udp,udpclient,C#,.net,Udp,Udpclient,有C#或VB.NET中的示例设计代码吗 正在.NET中查找UDP管道示例 我下载了 简单UDP代理/管道0.4.1 路易吉·奥里玛 这是C++ +…/P> 它工作得很好。。但我想在.NET中实现自己的功能。。因此,我可以直接嗅探数据包。修复了它如果有人想了解我是如何修复它的,这里是解决方案。。请注意,如果你无意中发现这一点,这可能是谷歌上唯一的UDP代理。。这是用C#编码的。。使用在线.NET转换器轻松移植到VB.NET 很高兴此代码可以正常工作;) 当然它没有效率,因为它不使用事件。。与Rec

有C#或VB.NET中的示例设计代码吗

正在.NET中查找UDP管道示例

我下载了 简单UDP代理/管道0.4.1 路易吉·奥里玛

这是C++ +…/P>


它工作得很好。。但我想在.NET中实现自己的功能。。因此,我可以直接嗅探数据包。

修复了它如果有人想了解我是如何修复它的,这里是解决方案。。请注意,如果你无意中发现这一点,这可能是谷歌上唯一的UDP代理。。这是用C#编码的。。使用在线.NET转换器轻松移植到VB.NET

很高兴此代码可以正常工作;)

当然它没有效率,因为它不使用事件。。与ReceiveAsync/EndReceive类似

唯一的缺点是不使用AYSN记录事件。。就是你在下面看到的工作代码。。将不得不陷入无限循环中。。它会消耗你的CPU周期。。很容易用线固定。睡眠(10)。。(不要设置为高,否则将出现udp延迟)

当我启动一个新的UDP代理项目时,我总是回头看这个答案,上面的代码在某些UDP服务器上出现问题,它会丢失连接(在无连接协议上)。是的,我不知道它是如何发生的,但我使用UDPClient而不是Sockets修复了它。

这是一个不同的 TCP或UDP重定向器/UDP代理/UDP管道/TCP代理/TCP管道


我创建了许多不同的UDP代理连接保镖模型,它们似乎都使用标准套接字类来解除连接,但使用UDPClient类,这个问题完全消失了

UDP代理只有25行代码,但是它的功能和稳定性都不理想

下面是如何在TCP和UDP中执行此操作的示例

C#下面的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Diagnostics;
using System.Net;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string Address= "*PUT IP ADDRESS HERE WHERE UDP SERVER IS*";
            int UDPPort = *PUT UDP SERVER PORT HERE*;
            UdpRedirect _UdpRedirect = new UdpRedirect() { _address = Address, _Port = UDPPort};
            Thread _Thread = new Thread(_UdpRedirect.Connect);
            _Thread.Name = "UDP";
            _Thread.Start();

            int TCPPort = *PUT TCP PORT HERE FOR TCP PROXY*;       
            TcpRedirect _TcpRedirect = new TcpRedirect(Address, TCPPort);            
        }
    }
    class UdpRedirect
    {
        public string _address;
        public int _Port;
        public UdpRedirect()
        {
        }

        public void Connect()
        {
            UdpClient _UdpClient = new UdpClient(_Port);
            int? LocalPort = null;
            while (true)
            {
                IPEndPoint _IPEndPoint = null;
                byte[] _bytes = _UdpClient.Receive(ref _IPEndPoint);
                if (LocalPort == null) LocalPort = _IPEndPoint.Port;
                bool Local = IPAddress.IsLoopback(_IPEndPoint.Address);
                string AddressToSend = null;
                int PortToSend = 0;
                if (Local)
                {
                    AddressToSend = _address;
                    PortToSend = _Port;
                }
                else
                {
                    AddressToSend = "127.0.0.1";
                    PortToSend = LocalPort.Value;
                }
                _UdpClient.Send(_bytes, _bytes.Length, AddressToSend, PortToSend);
            }
        }
    }
    class TcpRedirect
    {
        public TcpRedirect(string _address, int _Port)
        {

            TcpListener _TcpListener = new TcpListener(IPAddress.Any, _Port);
            _TcpListener.Start();
            int i = 0;
            while (true)
            {
                i++;
                TcpClient _LocalSocket = _TcpListener.AcceptTcpClient();
                NetworkStream _NetworkStreamLocal = _LocalSocket.GetStream();

                TcpClient _RemoteSocket = new TcpClient(_address, _Port);
                NetworkStream _NetworkStreamRemote = _RemoteSocket.GetStream();
                Console.WriteLine("\n<<<<<<<<<connected>>>>>>>>>>>>>");
                Client _RemoteClient = new Client("remote" + i)
                {
                    _SendingNetworkStream = _NetworkStreamLocal,
                    _ListenNetworkStream = _NetworkStreamRemote,
                    _ListenSocket = _RemoteSocket
                };
                Client _LocalClient = new Client("local" + i)
                {
                    _SendingNetworkStream = _NetworkStreamRemote,
                    _ListenNetworkStream = _NetworkStreamLocal,
                    _ListenSocket = _LocalSocket
                };
            }
        }
        public class Client
        {
            public TcpClient _ListenSocket;
            public NetworkStream _SendingNetworkStream;
            public NetworkStream _ListenNetworkStream;
            Thread _Thread;
            public Client(string Name)
            {
                _Thread = new Thread(new ThreadStart(ThreadStartHander));
                _Thread.Name = Name;
                _Thread.Start();
            }
            public void ThreadStartHander()
            {
                Byte[] data = new byte[99999];
                while (true)
                {
                    if (_ListenSocket.Available > 0)
                    {
                        int _bytesReaded = _ListenNetworkStream.Read(data, 0, _ListenSocket.Available);
                        _SendingNetworkStream.Write(data, 0, _bytesReaded);
                        Console.WriteLine("(((((((" + _bytesReaded + "))))))))))" + _Thread.Name + "\n" + ASCIIEncoding.ASCII.GetString(data, 0, _bytesReaded).Replace((char)7, '?'));
                    }
                    Thread.Sleep(10);
                }
            }

        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Net.Sockets;
使用系统诊断;
Net系统;
使用系统线程;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
string Address=“*将IP地址放在UDP服务器所在的位置*”;
int UDPPort=*将UDP服务器端口放在此处*;
UdpRedirect UdpRedirect=新的UdpRedirect(){address=地址,Port=UDPPort};
线程_Thread=新线程(_UdpRedirect.Connect);
_Thread.Name=“UDP”;
_Thread.Start();
int TCPPort=*将TCP端口放在此处,用于TCP代理*;
TcpRedirect _TcpRedirect=新的TcpRedirect(地址,TCPPort);
}
}
类UdpRedirect
{
公共字符串地址;
公共国际港口;
公共UdpRedirect()
{
}
公共void Connect()
{
UdpClient _UdpClient=新的UdpClient(_端口);
int?LocalPort=null;
while(true)
{
IPEndPoint _IPEndPoint=null;
byte[]\u bytes=\u UdpClient.Receive(ref\u IPEndPoint);
如果(LocalPort==null)LocalPort=\u IPEndPoint.Port;
bool Local=IPAddress.IsLoopback(\u IPEndPoint.Address);
字符串AddressToSend=null;
int-PortToSend=0;
如果(本地)
{
AddressToSend=_地址;
PortToSend=_端口;
}
其他的
{
AddressToSend=“127.0.0.1”;
PortToSend=LocalPort.Value;
}
_UdpClient.Send(_字节,_字节.Length,AddressToSend,PortToSend);
}
}
}
类TcpRedirect
{
公共TcpRedirect(字符串地址,整数端口)
{
TcpListener\u TcpListener=新的TcpListener(IPAddress.Any,_Port);
_TcpListener.Start();
int i=0;
while(true)
{
i++;
TcpClient _LocalSocket=_TcpListener.AcceptTcpClient();
NetworkStream _NetworkStreamLocal=_LocalSocket.GetStream();
TcpClient\u RemoteSocket=新的TcpClient(\u地址,\u端口);
NetworkStream _NetworkStreamRemote=_RemoteSocket.GetStream();
Console.WriteLine(“\n>>”);
客户端_RemoteClient=新客户端(“远程”+i)
{
_SendingNetworkStream=\u NetworkStreamLocal,
_ListenNetworkStream=\u NetworkStreamRemote,
_ListenSocket=\u RemoteSocket
};
客户机_LocalClient=新客户机(“本地”+i)
{
_SendingNetworkStream=\u NetworkStreamRemote,
_ListenNetworkStream=\u NetworkStreamLocal,
_ListenSocket=\u LocalSocket
};
}
}
公共类客户端
{
公共TcpClient _ListenSocket;
公共网络流\u发送网络流;
公共网络流(ListenNetworkStream),;
螺纹(u螺纹),;
公共客户端(字符串名称)
{
_螺纹=新螺纹(新螺纹起点(螺纹起点));
_Thread.Name=Name;
_Thread.Start();
}
公共无效线程StartAnder()
{
字节[]数据=新字节[99999];
while(true)
{
如果(_ListenSocket.Available>0)
{
int _bytesread=_ListenNetworkStream.Read(数据,0,_ListenSocket.Available);
_SendingNetworkStream.Write(数据,0,字节读取);
Console.WriteLine(((((((+)((+)(+))))(+)(+)(+))(+)(+)(+).Thread.Name+“\n”+ascienceoding.ASCII.GetString(数据,0,(字节读取)。替换((char)7,?);
}
睡眠(10);
}
}
}
}
}
VB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Diagnostics;
using System.Net;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string Address= "*PUT IP ADDRESS HERE WHERE UDP SERVER IS*";
            int UDPPort = *PUT UDP SERVER PORT HERE*;
            UdpRedirect _UdpRedirect = new UdpRedirect() { _address = Address, _Port = UDPPort};
            Thread _Thread = new Thread(_UdpRedirect.Connect);
            _Thread.Name = "UDP";
            _Thread.Start();

            int TCPPort = *PUT TCP PORT HERE FOR TCP PROXY*;       
            TcpRedirect _TcpRedirect = new TcpRedirect(Address, TCPPort);            
        }
    }
    class UdpRedirect
    {
        public string _address;
        public int _Port;
        public UdpRedirect()
        {
        }

        public void Connect()
        {
            UdpClient _UdpClient = new UdpClient(_Port);
            int? LocalPort = null;
            while (true)
            {
                IPEndPoint _IPEndPoint = null;
                byte[] _bytes = _UdpClient.Receive(ref _IPEndPoint);
                if (LocalPort == null) LocalPort = _IPEndPoint.Port;
                bool Local = IPAddress.IsLoopback(_IPEndPoint.Address);
                string AddressToSend = null;
                int PortToSend = 0;
                if (Local)
                {
                    AddressToSend = _address;
                    PortToSend = _Port;
                }
                else
                {
                    AddressToSend = "127.0.0.1";
                    PortToSend = LocalPort.Value;
                }
                _UdpClient.Send(_bytes, _bytes.Length, AddressToSend, PortToSend);
            }
        }
    }
    class TcpRedirect
    {
        public TcpRedirect(string _address, int _Port)
        {

            TcpListener _TcpListener = new TcpListener(IPAddress.Any, _Port);
            _TcpListener.Start();
            int i = 0;
            while (true)
            {
                i++;
                TcpClient _LocalSocket = _TcpListener.AcceptTcpClient();
                NetworkStream _NetworkStreamLocal = _LocalSocket.GetStream();

                TcpClient _RemoteSocket = new TcpClient(_address, _Port);
                NetworkStream _NetworkStreamRemote = _RemoteSocket.GetStream();
                Console.WriteLine("\n<<<<<<<<<connected>>>>>>>>>>>>>");
                Client _RemoteClient = new Client("remote" + i)
                {
                    _SendingNetworkStream = _NetworkStreamLocal,
                    _ListenNetworkStream = _NetworkStreamRemote,
                    _ListenSocket = _RemoteSocket
                };
                Client _LocalClient = new Client("local" + i)
                {
                    _SendingNetworkStream = _NetworkStreamRemote,
                    _ListenNetworkStream = _NetworkStreamLocal,
                    _ListenSocket = _LocalSocket
                };
            }
        }
        public class Client
        {
            public TcpClient _ListenSocket;
            public NetworkStream _SendingNetworkStream;
            public NetworkStream _ListenNetworkStream;
            Thread _Thread;
            public Client(string Name)
            {
                _Thread = new Thread(new ThreadStart(ThreadStartHander));
                _Thread.Name = Name;
                _Thread.Start();
            }
            public void ThreadStartHander()
            {
                Byte[] data = new byte[99999];
                while (true)
                {
                    if (_ListenSocket.Available > 0)
                    {
                        int _bytesReaded = _ListenNetworkStream.Read(data, 0, _ListenSocket.Available);
                        _SendingNetworkStream.Write(data, 0, _bytesReaded);
                        Console.WriteLine("(((((((" + _bytesReaded + "))))))))))" + _Thread.Name + "\n" + ASCIIEncoding.ASCII.GetString(data, 0, _bytesReaded).Replace((char)7, '?'));
                    }
                    Thread.Sleep(10);
                }
            }

        }
    }
}
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Net.Sockets
Imports System.Diagnostics
Imports System.Net
Imports System.Threading

Namespace ConsoleApplication1
    Class Program
        Private Shared Sub Main(args As String())
            Dim Address As String = "*PUT IP ADDRESS HERE WHERE UDP SERVER IS*"
            Dim UDPPort As Integer = *PUT UDP SERVER PORT HERE*
            Dim _UdpRedirect As New UdpRedirect() With { _
                Key ._address = Address, _
                Key ._Port = UDPPort _
            }
            Dim _Thread As New Thread(AddressOf _UdpRedirect.Connect)
            _Thread.Name = "UDP"
            _Thread.Start()

            Dim TCPPort As Integer = *PUT TCP SERVER PORT HERE*
            Dim _TcpRedirect As New TcpRedirect(Address, TCPPort)
        End Sub
    End Class
    Class UdpRedirect
        Public _address As String
        Public _Port As Integer
        Public Sub New()
        End Sub

        Public Sub Connect()
            Dim _UdpClient As New UdpClient(_Port)
            Dim LocalPort As System.Nullable(Of Integer) = Nothing
            While True
                Dim _IPEndPoint As IPEndPoint = Nothing
                Dim _bytes As Byte() = _UdpClient.Receive(_IPEndPoint)
                If LocalPort Is Nothing Then
                    LocalPort = _IPEndPoint.Port
                End If
                Dim Local As Boolean = IPAddress.IsLoopback(_IPEndPoint.Address)
                Dim AddressToSend As String = Nothing
                Dim PortToSend As Integer = 0
                If Local Then
                    AddressToSend = _address
                    PortToSend = _Port
                Else
                    AddressToSend = "127.0.0.1"
                    PortToSend = LocalPort.Value
                End If
                _UdpClient.Send(_bytes, _bytes.Length, AddressToSend, PortToSend)
            End While
        End Sub
    End Class
    Class TcpRedirect
        Public Sub New(_address As String, _Port As Integer)

            Dim _TcpListener As New TcpListener(IPAddress.Any, _Port)
            _TcpListener.Start()
            Dim i As Integer = 0
            While True
                i += 1
                Dim _LocalSocket As TcpClient = _TcpListener.AcceptTcpClient()
                Dim _NetworkStreamLocal As NetworkStream = _LocalSocket.GetStream()

                Dim _RemoteSocket As New TcpClient(_address, _Port)
                Dim _NetworkStreamRemote As NetworkStream = _RemoteSocket.GetStream()
                Console.WriteLine(vbLf & "<<<<<<<<<connected>>>>>>>>>>>>>")
                Dim _RemoteClient As New Client("remote" + i) With { _
                    Key ._SendingNetworkStream = _NetworkStreamLocal, _
                    Key ._ListenNetworkStream = _NetworkStreamRemote, _
                    Key ._ListenSocket = _RemoteSocket _
                }
                Dim _LocalClient As New Client("local" + i) With { _
                    Key ._SendingNetworkStream = _NetworkStreamRemote, _
                    Key ._ListenNetworkStream = _NetworkStreamLocal, _
                    Key ._ListenSocket = _LocalSocket _
                }
            End While
        End Sub
        Public Class Client
            Public _ListenSocket As TcpClient
            Public _SendingNetworkStream As NetworkStream
            Public _ListenNetworkStream As NetworkStream
            Private _Thread As Thread
            Public Sub New(Name As String)
                _Thread = New Thread(New ThreadStart(AddressOf ThreadStartHander))
                _Thread.Name = Name
                _Thread.Start()
            End Sub
            Public Sub ThreadStartHander()
                Dim data As [Byte]() = New Byte(99998) {}
                While True
                    If _ListenSocket.Available > 0 Then
                        Dim _bytesReaded As Integer = _ListenNetworkStream.Read(data, 0, _ListenSocket.Available)
                        _SendingNetworkStream.Write(data, 0, _bytesReaded)
                        Console.WriteLine("(((((((" + _bytesReaded + "))))))))))" + _Thread.Name + vbLf + ASCIIEncoding.ASCII.GetString(data, 0, _bytesReaded).Replace(CChar(7), "?"C))
                    End If
                    Thread.Sleep(10)
                End While
            End Sub

        End Class
    End Class
End Namespace