📄 proxydlg.cpp
字号:
fprintf(daylogfd,"(%s)%s\n",m_strCurrentTime,strData);
fflush(daylogfd);
}
return ;
}
}
void CProxyDlg::Tcp_Accept(UINT wParam, LONG lParam)
{
/* int i, cli_len;
SOCKET newsocketfd;
SOCKADDR_IN cli_addr;
for(i=0;i<ServerLst.ServerTotal;i++)
{
if(ServerLst.TcpServerMember[i].Socketfd==(int)wParam)
break;
}
if(i==ServerLst.ServerTotal)
return;
switch(WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT:
cli_len=sizeof(cli_addr);
if((newsocketfd=accept(ServerLst.TcpServerMember[i].Socketfd,(SOCKADDR *)&cli_addr,&cli_len))==SOCKET_ERROR)
{
}else
{
sprintf(DataStr,"Description : %s connect to me",inet_ntoa(cli_addr.sin_addr));
SaveInformation(DataStr);
}
break;
default:
if(WSAGETSELECTERROR(lParam)!=0)
closesocket(ServerLst.TcpServerMember[i].Socketfd);
break;
}
return;*/
}
BOOL CProxyDlg::ConnectToServer(int ServerLstIndex, int TcpLstIndex)
{
SOCKET sd;
struct sockaddr_in sin;
int i=0;
CString strMsg;
CSock5 SendData;
if((sd=socket(AF_INET,SOCK_STREAM,0))==SOCKET_ERROR)
{
return FALSE;
}
strcpy(ProxyAddr,"202.118.227.60");
sin.sin_family=AF_INET;
sin.sin_port = htons(1080);//htons(TcpLst.TcpMember[TcpLstIndex].ServerPort);
sin.sin_addr.s_addr=inet_addr(ProxyAddr);//inet_addr(TcpLst.TcpMember[TcpLstIndex].ServerIpAddr);
if(connect(sd,(struct sockaddr*)&sin,sizeof(sin))==-1)
{
sprintf(DataStr,"Connect to %s fail",TcpLst.TcpMember[TcpLstIndex].ServerIpAddr);
SaveInformation(DataStr);
return FALSE;
}else
{
TcpLst.TcpMember[TcpLstIndex].ServerSocketfd=sd;
if(WSAAsyncSelect(TcpLst.TcpMember[TcpLstIndex].ServerSocketfd, m_hWnd, UM_RECV, FD_READ|FD_CLOSE)==SOCKET_ERROR)
{
closesocket(TcpLst.TcpMember[TcpLstIndex].ServerSocketfd);
TcpLst.TcpMember[TcpLstIndex].ServerSocketfd=-1;
return FALSE;
}else
{
sprintf(DataStr,"Connect to %s succeed!",ProxyAddr);
SaveInformation(DataStr);
SendData.userdata.negotiation.Version=0x05;
SendData.userdata.negotiation.MethodCount=0X01;
SendData.userdata.negotiation.Method[0]=0x00;
if(send(sd,SendData.userdata.data,3,0)==SOCKET_ERROR)
{
return FALSE;
}
// commsend(SendData,3);
/* SendData.userdata.connect.Version=0x05;
SendData.userdata.connect.Command=0x01;
SendData.userdata.connect.RSV=0x00;
SendData.userdata.connect.AType=0x01;
SendData.userdata.connect.Addr=inet_addr(TcpLst.TcpMember[0].ServerIpAddr);
SendData.userdata.connect.Port=htons(TcpLst.TcpMember[0].ServerPort);
commsend(SendData,sizeof(tagSock5connect));*/
return TRUE;
}
}
}
void CProxyDlg::GetCurrentTimeStr()
{
CTime current=CTime::GetCurrentTime();
m_strCurrentTime.Format("%04d-%02d-%02d %02d:%02d:%02d",current.GetYear(),current.GetMonth(),current.GetDay(),current.GetHour(),current.GetMinute(),current.GetSecond());
m_strTime.Format("%02d:%02d:%02d",current.GetHour(),current.GetMinute(),current.GetSecond());
}
BOOL CProxyDlg::Tcp_Write(int TcpLstIndex, BOOL ClientToServer,char *DataStr, int Len)
{
char strTemp[20];
if(send(TcpLst.TcpMember[TcpLstIndex].ServerSocketfd,DataStr,Len,0)==SOCKET_ERROR)
{
return FALSE;
}
if (bWriteLog)
{
strcpy(strTemp,TcpLst.TcpMember[TcpLstIndex].ServerIpAddr);
GetCurrentTimeStr();
fprintf(daylogfd,"[%s]Send to %s : ",
m_strTime,strTemp);
for(int i=0;i<Len;i++)
{
fprintf(daylogfd,"%02x ",(unchar)DataStr[i]);
}
fprintf(daylogfd,"\n");
fflush(daylogfd);
}
return TRUE;
}
BOOL CProxyDlg::DestroyWindow()
{
Variable_Release();
return CDialog::DestroyWindow();
}
int CProxyDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
//右键弹出菜单为IDR_TRAYPOPUP
//托盘图标为m_hTrayIcon
//通知消息为WM_TRAYNOTIFY
if(!m_TrayIcon.Create(this,IDR_MENU_POP,_T("代理工具"),m_hTrayIcon,WM_TRAYNOTIFY))
{
AfxMessageBox(_T("Failed to create tray icon"),MB_OK|MB_ICONSTOP);
return -1;
}
return 0;
}
LRESULT CProxyDlg::OnTrayNotification(WPARAM wParam, LPARAM lParam)
{
//返回类CTrayNotifyIcon消息响应函数
return m_TrayIcon.OnTrayNotification(wParam,lParam);
}
void CProxyDlg::OnHide()
{
ShowWindow(SW_SHOWMINIMIZED);
ShowWindow(SW_HIDE);
UpdateWindow();
m_TrayIcon.m_bIsWindowNormal = false;
}
void CProxyDlg::OnShow()
{
ShowWindow(SW_SHOWNOACTIVATE);
SetForegroundWindow();
m_TrayIcon.m_bIsWindowNormal = true;
}
void CProxyDlg::OnUpdateShow(CCmdUI* pCmdUI)
{
pCmdUI->Enable(!m_TrayIcon.m_bIsWindowNormal);
}
void CProxyDlg::OnUpdateHide(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_TrayIcon.m_bIsWindowNormal);
}
void CProxyDlg::OnExit()
{
DestroyWindow();
}
void CProxyDlg::OnButtonDisable()
{
CPktB SendData;
SendData.did=inet_addr(TcpLst.TcpMember[0].ServerIpAddr);
SendData.sid=htonl(MyIp);
SendData.centerid=htons(0x2900);
SendData.type=htons(0x8203);
SendData.version=0x30;
commsend(SendData,13);
}
void CProxyDlg::OnButtonEnable()
{
CPktB SendData;
SendData.did=inet_addr(TcpLst.TcpMember[0].ServerIpAddr);
SendData.sid=htonl(MyIp);
SendData.centerid=htons(0x2900);
SendData.type=htons(0x8202);
SendData.version=0x30;
commsend(SendData,13);
}
void CProxyDlg::OnButtonQuery()
{
CPktB SendData;
SendData.did=inet_addr(TcpLst.TcpMember[0].ServerIpAddr);
SendData.sid=htonl(MyIp);
SendData.centerid=htons(0x2900);
SendData.type=htons(0x8200);
SendData.version=0x30;
commsend(SendData,13);
}
void CProxyDlg::OnOK()
{
if (ConnectToServer(0,0))
m_Connect.EnableWindow(FALSE);
}
void CProxyDlg::DoEvent(char buf[], int buflen)
{
CPktB RecvData;
CVehicleType VehicleType;
char sTemp[20];
static int Count=0;
CSock5 Sock5Data;
if (buflen<2)
return;
if ((buf[0]==0x7e)&&(buf[buflen-1]==0x7e))
{
memcpy((void *)&RecvData,buf+1,buflen-3);
switch (htons(RecvData.type))
{
case 0x8240:
if (RecvData.userdata.Nm_8240pkt1.type==1)
{
for (int i=0;i<RecvData.userdata.Nm_8240pkt1.Count;i++)
{
VehicleType=RecvData.userdata.Nm_8240pkt1.VehicleType[i];
VehicleType.Count=htons(VehicleType.Count);
sprintf(sTemp,"0x%x",VehicleType.CenterId&0x00ff|0x2900);
m_List.InsertItem(0,sTemp,0);
ReConvertStr(VehicleType.VehicleType,sTemp,10);
m_List.SetItemText(0,1,sTemp);
sprintf(sTemp,"%d",VehicleType.Count);
m_List.SetItemText(0,2,sTemp);
if ((VehicleType.CenterId&0x2900)!=0x2900)
{
Count+=VehicleType.Count;
}
}
sprintf(sTemp,"%d",Count);
m_Count.SetWindowText(sTemp);
if (RecvData.userdata.Nm_8240pkt1.Count<16)
Count=0;
}
else
AfxMessageBox("Fail");
break;
case 0x8242:
AfxMessageBox("允许成功");
break;
case 0x8243:
AfxMessageBox("禁止成功");
break;
case 0x8244:
switch (RecvData.userdata.data[0])
{
case 0x01:
m_Status.SetWindowText("允许");
break;
case 0x00:
m_Status.SetWindowText("禁止");
break;
default:
m_Status.SetWindowText("未知");
break;
}
break;
default:
break;
}
}
else
{
memcpy(Sock5Data.userdata.data,buf,buflen);
if (buflen==2)
{
if (Sock5Data.userdata.negotiationack.Method!=0xff)
{
Sock5Data.userdata.connect.Version=0x05;
Sock5Data.userdata.connect.Command=0x01;
Sock5Data.userdata.connect.RSV=0x00;
Sock5Data.userdata.connect.AType=0x01;
Sock5Data.userdata.connect.Addr=inet_addr(TcpLst.TcpMember[0].ServerIpAddr);
Sock5Data.userdata.connect.Port=htons(TcpLst.TcpMember[0].ServerPort);
commsend(Sock5Data,sizeof(tagSock5connect));
}
else
m_Connect.EnableWindow(FALSE);
}
else
{
if (Sock5Data.userdata.connectack.Rep!=0x00)
{
m_Connect.EnableWindow(FALSE);
}
}
}
}
void CProxyDlg::ConvertIp()
{
char strHostName[100];
char Ip[20];
gethostname(strHostName,100);
struct hostent *pHostent=gethostbyname(strHostName);
strcpy(Ip,inet_ntoa(*(struct in_addr *)*pHostent->h_addr_list));
MyIp=inet_addr(Ip);
}
void CProxyDlg::commsend(CPktB SendData, int iLen)
{
if (TcpLst.TcpMember[0].ServerSocketfd==-1)
AfxMessageBox("请先连接服务器");
else
{
int Len;
char TempOld[MAX_LEN],TempNew[MAX_LEN];
memcpy(TempOld,(char*)&SendData,iLen);
Len=AddFsynToBuf(TempOld,TempNew,iLen);
Tcp_Write(0,TRUE,TempNew,Len);
}
}
int CProxyDlg::AddFsynToBuf(char OldBuf[], char NewBuf[], int Len)
{
int Len_Temp=1,i;
char OldBuf_Temp[MAX_LEN+2];
unsigned short CheckSum=Get_CheckSum(OldBuf,Len);
memcpy((void *)OldBuf_Temp,(void *)OldBuf,Len);
CheckSum=htons(CheckSum);
memcpy((void *)(OldBuf_Temp+Len),(void *)&CheckSum,2);
for(i=0;i<Len+2;i++)
{
switch(OldBuf_Temp[i])
{
case 0x7e:
NewBuf[Len_Temp++]=0x7d;
NewBuf[Len_Temp++]=0x02;
break;
case 0x7d:
NewBuf[Len_Temp++]=0x7d;
NewBuf[Len_Temp++]=0x01;
break;
default:
NewBuf[Len_Temp++]=OldBuf_Temp[i];
break;
}//end switch(OldBuf[i])
}//end for
NewBuf[0]=0x7e;
NewBuf[Len_Temp++]=0x7e;
return Len_Temp;
}
unshort CProxyDlg::Get_CheckSum(char buf[], int len)
{
unsigned short CheckSum=0;
for(int i=0;i<len;i++)
{
CheckSum += (unsigned char )buf[i];
if(CheckSum < (unsigned char)buf[i])
CheckSum += 1;
}
CheckSum=~CheckSum;
CheckSum += 1;
return CheckSum;
}
void CProxyDlg::ReConvertStr(char buf[], char newbuf[], int len)
{
int i;
memcpy((void *)newbuf,(void *)buf,len);
for(i=len-1;i>=0;i--)
{
if(newbuf[i]!=0x20)
break;
}
if(i>=0)
newbuf[i+1]=0;
else
newbuf[0]=0;
}
void CProxyDlg::SendStatusQuery()
{
if (TcpLst.TcpMember[0].ServerSocketfd!=-1)
{
CPktB SendData;
SendData.did=inet_addr(TcpLst.TcpMember[0].ServerIpAddr);
SendData.sid=htonl(MyIp);
SendData.centerid=htons(0x2900);
SendData.type=htons(0x8204);
SendData.version=0x30;
commsend(SendData,13);
SendData.type=htons(0x1101);
commsend(SendData,13);
}
}
void CProxyDlg::commsend(CSock5 SendData, int iLen)
{
Tcp_Write(0,TRUE,(char*)&SendData,iLen);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -