📄 globalfunc.cpp
字号:
#include "stdafx.h"
#include "global.h"
#include "IpHeaderSetupDlg.h"
BOOL MACStringToMAC(LPTSTR lpMac,unsigned char* strMac)
{
unsigned char* tempMac=(unsigned char*)lpMac;
//检查MAC地址字符串的合法性
while(*tempMac!='\0')
{
if(!((*tempMac>='0'&&*tempMac<='9')||(*tempMac>='A'&&*tempMac<='F')))
{
ASSERT(FALSE);
return FALSE;
}
tempMac++;
}
tempMac=(unsigned char*)lpMac;
for(int i=0;i<6;i++)
{
char SemiByte[2];
for(int j=0;j<2;j++)
{
SemiByte[j]=tempMac[2*i+j];
if(SemiByte[j]>='0'&&SemiByte[j]<='9')
SemiByte[j]-='0';
else if(SemiByte[j]>='A'&&SemiByte[j]<='F')
SemiByte[j]=SemiByte[j]-'A'+10;
else
ASSERT(FALSE);
}
strMac[i]=(SemiByte[0]<<4)+SemiByte[1];
}
return TRUE;
}
UINT ThreadFuncOfLoopSend(LPVOID pParam)
{
while(g_bRunning)
{
g_Adapter.SetNumWrites(1);
g_Adapter.SendPacket(TRUE);
}
g_Adapter.SetCurFillPos(0);
g_Adapter.FreePacket();
return 0;
}
void FillIpHeader(CIpHeaderSetupDlg* pDlg)
{
//填充IP头
//由于Version和HeaderLen各占四位,刚好一个字节,在数据结构Version在低地址,HeaderLen占高地址
//包的顺序要求Version在前,HeaderLen在后,所以交换
g_IpFrame.ipHeader.Version=pDlg->m_nHeadLen;
g_IpFrame.ipHeader.HeaderLen=pDlg->m_nVersion;
g_IpFrame.ipHeader.ServiceType=pDlg->m_nServiceType;
short int totalLen;
totalLen=pDlg->m_nHeadLen*4+pDlg->m_strData.GetLength();
g_IpFrame.ipHeader.TotalLen=htons(totalLen);
g_IpFrame.ipHeader.Identification=htons(pDlg->m_nIden);
//由于网络字节序和数据结构的原因,Flags和FragOffset需作进一步处理
g_IpFrame.ipHeader.Flags=pDlg->m_nFlag;
g_IpFrame.ipHeader.FragOffset=pDlg->m_nOffset;
g_IpFrame.ipHeader.TTL=pDlg->m_nTtl;
g_IpFrame.ipHeader.Protocol=pDlg->m_nProtocol;
//g_IpFrame.ipHeader.HeaderCheckSum=0;
memcpy(g_IpFrame.ipHeader.DestIpAddr,&pDlg->m_IpDestAddr ,4);
memcpy(g_IpFrame.ipHeader.SrcIpAddr,&pDlg->m_IpSrcAddr, 4);
//处理数据
int OptionsLen=0;
int PaddingLen=0;
int dataLen=0;
OptionsLen=pDlg->m_strOptions.GetLength();
if(OptionsLen!=0)
{
ASSERT(OptionsLen<sizeof(g_IpFrame.OptionsAndData));
memcpy(g_IpFrame.OptionsAndData,(unsigned char*)(pDlg->m_strOptions.GetBuffer(OptionsLen)),OptionsLen);
pDlg->m_strOptions.ReleaseBuffer();
}
if(OptionsLen%4!=0)
{
ASSERT(pDlg->m_nHeadLen*4-20-OptionsLen>=0);
PaddingLen=pDlg->m_nHeadLen*4-20-OptionsLen;
ASSERT(PaddingLen<sizeof(g_IpFrame.OptionsAndData)-OptionsLen);
memset(&g_IpFrame.OptionsAndData[OptionsLen],'P',PaddingLen);
}
dataLen=pDlg->m_strData.GetLength();
if(dataLen!=0)
{
ASSERT(dataLen<sizeof(g_IpFrame.OptionsAndData)-OptionsLen-PaddingLen);
memcpy(&g_IpFrame.OptionsAndData[OptionsLen+PaddingLen],(unsigned char*)(pDlg->m_strData.GetBuffer(dataLen)),dataLen);
pDlg->m_strData.ReleaseBuffer();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -