怎么使用SOCKS5发UDP?(200分)(200分)

  • 主题发起人 主题发起人 Delphi On Me
  • 开始时间 开始时间
D

Delphi On Me

Unregistered / Unconfirmed
GUEST, unregistred user!
我已经成功地在代理服务器建立了UDP ASSOSIATE,然后我向某一主机发UDP,对方可以
收到,但是对方发回的数据我却收不到,这是为什么?请教!
 
UDP不反回数据
 
我是说收不到对方发给我的数据。
 
你的问题我不明白
 
如何建立UDP ASSOSIATE? 建立后发送代码是否与原来一样?
 
返回的ip不对,我想。
 
一般是,首先用TCP和socks5 server建立UDP ASSOSIATE后,TCP保持不断,
这样UDP才可以收发,这个TCP切断后,UDP也就收不了
 
那就是你监听的端口不对了,否则一定会收到的。
 
不晓得有没有支持Socks5的UDP控件,我也在为这个问题烦恼。NMUDP是肯定不得行的,ICS
的WSocket控件只有在TCP时才支持代理,而且使用很简单。
 
  应该可以的,我写了一个SOCKS5的代理,连QQ很好啊。

  你用的什么组件?
 
大侠, 能否讲解一下Socks5的UDP的具体工作过程

我也看过RFC1928关于Socks5代理数据的描述, 也正常地建立了与服务器的连接, 但是发送
数据时总是出错. 您能否讲解一下数据是如何封装, 也就是说的服务器上, 对于发送过来的
UDP包, 你是具体如何处理的?
 
C++ Builder的程序,不好意思

//远程主机的UDP包
void __fastcall TMDIChild::UDPRemoteReceiveData(BYTE *buffer, int Len, AnsiString FromIP, int Port)
{//
ReceiveCount += Len ;

Memo->Lines->Add( "Receive From "+ FromIP +" : "+ IntToStr(Port)+" "+IntToStr(Len)+" Bytes");
int i;
AnsiString szTemp = FromIP+".",szIP;

BYTE *BUF =NULL;
BUF = (BYTE*)malloc( Len + 50 );
ZeroMemory(BUF,Len + 50 );

BUF[3] = 1; //IP V4
for(i = 0;i<4;i++)
{
szIP = szTemp.SubString(1,szTemp.Pos(".")-1);
szTemp = szTemp.SubString(szTemp.Pos(".")+1,szTemp.Length());
BUF[i+4] = StrToInt(szIP);
}

BUF[8] = UDPLocal->RemotePort / 0x100 ;
BUF[9] = UDPLocal->RemotePort % 0x100 ;

CopyMemory((BYTE*)&BUF[10],buffer,Len);

UDPLocal->Send((char*)BUF,Len+10);
Memo->Lines->Add( "Send To "+ UDPLocal->RemoteHost +" : "+ IntToStr(UDPLocal->RemotePort)+" "+IntToStr(Len+10)+" Bytes");

free(BUF);
}
//---------------------------------------------------------------------------
//客户端的UDP包
void __fastcall TMDIChild::UDPLocalReceiveData(BYTE *buf, int Len, AnsiString FromIP, int Port)
{
Memo->Lines->Add( "Receive From "+ FromIP +" : "+ IntToStr(Port)+" "+IntToStr(Len)+" Bytes");
int i;
char RemoteIP[120]=TEXT("");

int j ;
char domainName[150];
if( buf[0] == 0 && buf[1] == 0 )
{
switch( buf[3] )
{
case 1: //IP V4

//Get IP
sprintf(RemoteIP,"%u.%u.%u.%u",int(buf[4]), int(buf[5]) ,int(buf[6]),int(buf[7]) );
//UDP To Server
if( !UDPRemote->OpenFlag )
{
UDPRemote->Open();
}
UDPRemote->RemoteHost = RemoteIP;
UDPRemote->RemotePort = buf[8]*0x100 + buf[9];

//UDP ASSOCIATE
i = Len-10;
UDPRemote->Send((char*)&buf[10] ,i );

SendCount += i;

Memo->Lines->Add( "Send To "+ UDPRemote->RemoteHost +" : "+ IntToStr(UDPRemote->RemotePort)+" "+IntToStr(Len+10)+" Bytes");
break ;
case 3: //Domain Name
//Get DomainName
for(j = 0;j < buf[4] ;j ++ ) domainName[j] = buf[j+5];
domainName[j] = 0 ;

//UDP To Server
UDPRemote->RemoteHost = domainName;
UDPRemote->RemotePort = buf[8]*0x100 + buf[9];

//UDP ASSOCIATE
i = Len-10;
UDPRemote->Send((char*)&buf[10] ,i );
break;
case 4: //IP V6
//Later
break;
}
}
}
//---------------------------------------------------------------------------
 
大哥,如何在代理服务器和内部主机之间建立UDP ASSOSIATE
 
to : 毛虎林

你好,我正在要做一个QQ的代理服务器,请问如何实现?
使用什么组件?
 
我可以给你一个CBuilder的源代码,怎么联系?
现在只实现了UDP,TCP还没有实现。
 
to : 毛虎林

请发信到 yjh@tomore.com
我完成后,会发给你我做的源码。

谢谢!



 
to : 毛虎林
虎林兄呀,怎么还没有发给我呢?
我的EMAIL是 yjh@tomore.com

谢谢了!



 
后退
顶部