C#UDP代理/管道
有C#或VB.NET中的示例设计代码吗 正在.NET中查找UDP管道示例 我下载了 简单UDP代理/管道0.4.1 路易吉·奥里玛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++ +…/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