防火墙代码

防火墙代码 
BOOL IpRule::OnInitDialog() 
{
CDialog::OnInitDialog();
m_hDLGBKBrush = CreateSolidBrush(RGB(242,246,250));
// TODO: Add extra initialization here
m_iprulelist.SetExtendedStyle(m_iprulelist.GetExtendedStyle()
| LVS_EX_CHECKBOXES | LVS_EX_FLATSB | LVS_EX_GRIDLINES
| LVS_EX_HEADERDRAGDROP | LVS_EX_FULLROWSELECT);
m_iprulelist.InsertColumn(0,"启用",LVCFMT_LEFT,20,-1);
m_iprulelist.InsertColumn(1,"规则名称",LVCFMT_LEFT,180,-1);
m_iprulelist.InsertColumn(2,"动作",LVCFMT_LEFT,40,-1);
m_iprulelist.InsertColumn(3,"协议",LVCFMT_LEFT,45,-1);
m_iprulelist.InsertColumn(4,"方向",LVCFMT_LEFT,40,-1);
m_iprulelist.InsertColumn(5,"对方IP",LVCFMT_LEFT,80,-1);
m_iprulelist.InsertColumn(6,"对方端口",LVCFMT_LEFT,60,-1);
m_iprulelist.InsertColumn(7,"本机端口",LVCFMT_LEFT,60,-1);
m_iprulelist.InsertItem(0,"");
return TRUE;  // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void IpRule::OnBeditip() 
{
EditIPRule m_editDlg;
POSITION pos ;
int row;
混合交换
DialogText dText;
CString address;
ICMP_ITEM *icRule = new ICMP_ITEM();
//TU_ITEM *tuRule;
pos = m_iprulelist.GetFirstSelectedItemPosition();   
row = m_iprulelist.GetNextSelectedItem(pos);
/*CString temp;
temp.Format("%d",row);
MessageBox(temp);*/
dText.name = m_iprulelist.GetItemText( row, 1 );
dText.action = m_iprulelist.GetItemText( row, 2 );
dText.direction = m_iprulelist.GetItemText( row, 4 );
if(m_iprulelist.GetItemText( row, 5 ) == "任意")
{
dText.destStartIp = 0;
dText.destEndIp = 0;
}
else
{
address = m_iprulelist.GetItemText( row, 5 );
dText.destStartIp = 0x00000000;//not finished
dText.destEndIp = 0x00000000;
}
if(address = m_iprulelist.GetItemText( row, 6 ) == "")
{
dText.destStartPort = "";
dText.destEndPort = "";
}
else
{
}
if(address = m_iprulelist.GetItemText( row, 7 ) == "")
{
dText.srcStartPort = "";
dText.srcEndPort = "";
}
else
{
}
GetDlgItemText(IDC_DESCRIPTION,dText.description);
/
//////////////////得到ICMP的详细信息
currRules->setPos(row+1);                              //置规则链表当前指针
if((dText.protocol=m_iprulelist.GetItemText( row, 3 ))=="ICMP")
{
currRules->getItem(icRule);
CString temp;
temp.Format("%d",icRule->code);
dText.icmpCode = temp;
temp.Format("%d",icRule->type);
dText.icmpType = temp;
}
m_editDlg.dText = dText;  //显示在eidtIpRule对话框
if(m_editDlg.DoModal() == IDOK)
{
dText = m_editDlg.dText; //得到eidtIpRule对话框里的内容
//名称
m_iprulelist.SetItemText(row,1,dText.name);
////动作///////////////////////////
m_iprulelist.SetItemText(row,2,dText.action);
//协议/////////////////////////////////////
m_iprulelist.SetItemText(row,3,dText.protocol);
//方向
m_iprulelist.SetItemText(row,4,dText.direction);
//IP段/////////////////////////////////////
/////////////
if(dText.destStartIp == 0 && dText.destEndIp == 0)
m_iprulelist.SetItemText(row,5,"任意");
else
{
address.Format("%s-->%s",inet_ntoa(*(in_addr*)&(dText.destStartIp)),
作者: ministar  2005-6-25 23:05  回复此发言   
--------------------------------------------------------------------------------
2 防火墙代码 
inet_ntoa(*(in_addr*)&(dText.destEndIp)));
m_iprulelist.SetItemText(row,5,address);
}
///端口////////////////////////
if(dText.protocol == "ICMP")
m_iprulelist.SetItemText(row,6,"");
else
{
if(dText.destStartPort == "" && dText.destEndPort == "")
m_iprulelist.SetItemText(row,6,"任意");
else
{
address.Format("%s-->%s",dText.destStartPort,dText.destEndPort);
m_iprulelist.SetItemText(row,6,address);
}
if(dText.srcStartPort == "" && dText.srcEndPort == "")
m_iprulelist.SetItemText(row,7,"任意");
else
{
address.Format("%s-->%s",dText.srcStartPort,dText.srcEndPort);
m_iprulelist.SetItemText(row,7,address);
}
}
//描述///////////////////////////
SetDlgItemText(IDC_DESCRIPTION,dText.description);
}
}
void IpRule::OnBaddip() 
{
EditIPRule m_editDlg;
int row;
DialogText dText;
CString address;
row = m_iprulelist.GetItemCount();
row--;
if(m_editDlg.DoModal() == IDOK)
{
dText = m_editDlg.dText; //得到eidtIpRule对话框里的内容
//名称
m_iprulelist.SetItemText(row,1,dText.name);
////动作///////////////////////////
m_iprulelist.SetItemText(row,2,dText.action);
//协议/////////////////////////////////////
m_iprulelist.SetItemText(row,3,dText.protocol);
/
/方向
m_iprulelist.SetItemText(row,4,dText.direction);
//IP段//////////////////////////////////////////////////
if(dText.destStartIp == 0 && dText.destEndIp == 0)
m_iprulelist.SetItemText(row,5,"任意");
else
{
address.Format("%s-->%s",inet_ntoa(*(in_addr*)&(dText.destStartIp)),
inet_ntoa(*(in_addr*)&(dText.destEndIp)));
m_iprulelist.SetItemText(row,5,address);
}
/
//端口////////////////////////
if(dText.protocol == "ICMP")
m_iprulelist.SetItemText(row,6,"");
else
{
if(dText.destStartPort == "" && dText.destEndPort == "")
m_iprulelist.SetItemText(row,6,"任意");
else
{
address.Format("%s-->%s",dText.destStartPort,dText.destEndPort);
m_iprulelist.SetItemText(row,6,address);
}
if(dText.srcStartPort == "" && dText.srcEndPort == "")
m_iprulelist.SetItemText(row,7,"任意");
else
{
address.Format("%s-->%s",dText.srcStartPort,dText.srcEndPort);
m_iprulelist.SetItemText(row,7,address);
}
}
//描述///////////////////////////
SetDlgItemText(IDC_DESCRIPTION,dText.description);
}
}
HBRUSH IpRule::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(nCtlColor == (CTLCOLOR_DLG | CTLCOLOR_STATIC | CTLCOLOR_BTN))
{
pDC->SetBkColor(RGB(242,246,250));
re
turn m_hDLGBKBrush;
}
// TODO: Return a different brush if the default is not desired
return hbr;
干墙}
int IpRule::WriteDefaultRule()
{
int num = 0;
if(rlFile.Open("rule\\rule.rl", CFile::modeReadWrite | CFile::typeBinary 
|CFile::shareExclusive) ==0 )
{
MessageBox("can't open rule file");
return false;
}
int count = 7;//规则数
ICMP_ITEM rl[7];
作者: ministar  2005-6-25 23:05  回复此发言   
--------------------------------------------------------------------------------
3 防火墙代码 
rlFile.Write(&count,4);
//rule 1;
rl[0].num = 1;
rl[0].use = 0;
strcpy(rl[0].name,"允许自己用ping探测其他机器");
rl[0].Proto = 1;
rl[0].destStartIp = inet_addr("0.0.0.0");
rl[0].destEndIp = inet_addr("0.0.0.0");
rl[0].type = 8;
rl[0].code = 0;
rl[0].direction = 2;
rl[0].action = 1;
strcpy(rl[0].description,"");
//rule 2
rl[1].num = 2;
rl[1].use = 0;
strcpy(rl[1].name,"允许路由器返回“超时”的ICMP回应包");
rl[1].Proto = 1;
rl[1].destStartIp = inet_addr("0.0.0.0");
rl[1].destEndIp = inet_addr("0.0.0.0");
rl[1].type = 11;
rl[1].code = 0;
rl[1].direction = 1;
rl[1].action = 1;
strcpy(rl[1].description,"");
//rule 3
rl[2].num = 3;
rl[2].use = 0;
strcpy(rl[2].name,"允许路由器返回“无法到达”的ICMP回应包");
rl[2].Proto = 1;
rl[2].destStartIp = inet_addr("0.0.0.0");
rl[2].destEndIp = inet_addr("0.0.0.0");
rl[2].type = 3;
rl[2].code = 0;
rl[2].direction = 1;
rl[2].action = 1;
节能装置strcpy(rl[2].description,"");
/
/rule 4
rl[3].num = 4;
rl[3].use = 0;
strcpy(rl[3].name,"允许其他机器用ping探测");
rl[3].Proto = 1;
rl[3].destStartIp = inet_addr("0.0.0.0");
rl[3].destEndIp = inet_addr("0.0.0.0");
rl[3].type = 0;
rl[3].code = 0;
rl[3].direction = 1;
rl[3].action = 1;
strcpy(rl[3].description,"");
//rule 5
rl[4].num = 5;
rl[4].use = 1;
strcpy(rl[4].name,"禁止所有ICMP包");
rl[4].Proto = 1;
rl[4].destStartIp = inet_addr("0.0.0.0");
rl[4].destEndIp = inet_addr("0.0.0.0");
rl[4].type = 0;
rl[4].code = 0;
rl[4].direction = 1;
rl[4].action = 1;
strcpy(rl[4].description,"");
//rule 6
rl[5].num = 6;
rl[5].use = 1;
strcpy(rl[5].name,"禁止所有TCP包");
rl[5].Proto = 6;
rl[5].destStartIp = inet_addr("0.0.0.0");
rl[5].destEndIp = inet_addr("0.0.0.0");
rl[5].type = 0;
rl[5].code = 0;
rl[5].direction = 1;
rl[5].action = 1;
strcpy(rl[5].description,"");
//rule 7
rl[6].num = 6;
rl[6].use = 1;
strcpy(rl[6].name,"禁止所有UDP包");
rl[6].Proto = 17;
rl[6].destStartIp = inet_addr("0.0.0.0");
rl[6].destEndIp = inet_addr("0.0.0.0");
rl[6].type = 0;
rl[6].code = 0;
rl[6].direction = 1;
rl[6].action = 1;
strcpy(rl[6].description,"");
//写入
rlFile.Write(&rl,272*7);
rlFile.Close();
return 0;
}
BOOL IpRule::WriteRule(CString fileName, TU_ITEM &rl) //返回值代表成功与否
{
return true
;
}
BOOL IpRule::WriteRule(CString fileName, ICMP_ITEM &rl) //返回值代表成功与否
{
return true;
}
int IpRule::ReadRule(CString fileName)
{
int count,i;
BYTE protocol;
pos =0;
if(rlFile.Open(fileName, CFile::modeReadWrite | CFile::typeBinary 
|CFile::shareExclusive) ==0 )
{
MessageBox("can't open rule file");
return false;
}
ICMP_ITEM *icItem;
TU_ITEM *tuItem;
char buffer[272];
rlFile.SeekToBegin();  //到文件头
/
/CString t;
rlFile.Read(&count,4);  //读取规则数目
pRule = (passRule *)malloc(count*sizeof(passRule));  //分配buffer
//t.Format("count:%d",a);
//AfxMessageBox(t); 看门狗芯片
//读入规则链表并初始化passRule////////////////////////////////////////
currRules = new CRule();
作者: ministar  2005-6-25 23:05  回复此发言   
--------------------------------------------------------------------------------
4 防火墙代码 
for(i=0;i<count;i++)
{
rlFile.Seek(4,CFile::current);  //先读协议
rlFile.Read(&protocol,1);
//if(protocol == 1)
//{
rlFile.Seek(-5,CFile::current);  //回到记录开始位置
rlFile.Read(buffer,272);
icItem = (ICMP_ITEM *)buffer;
AddToList(icItem);
if(icItem->use)        //存到下传规则buffer中
{
pRule[i].Proto = icItem->Proto;
pRule[i].destStartIp = icItem->destStartIp;
pRule[i].destEndIp = icItem->destEndIp;
pRule[i].srcStartPort = 0;
pRule[i].srcEndPort = 0;
pRule[i].destStartPort = 0;
pRule[i].destEndPort = 0;
}
currRules->append(icItem);
// }
/* else
{
rlFile.Seek(-5,CFile::current);
rlFile.Read(buffer,280);
//tuItem = (TU_ITEM *)buffer;
m_iprulelist.InsertItem(pos,"");
//icItem = (ICMP_ITEM *)buffer;
//m_iprulelist.SetItemText(pos,1,tuItem->name);
AddToList(tuItem);
if(tuItem->use)        //存到下传规则buffer中
{
pRule[i].Proto = tuItem->Proto;
pRule[i].destStartIp = tuItem->destStartIp;
pRule[i].destEndIp = tuItem->destEndIp;
pRule[i].srcStartPort = tuItem->srcStartPort;
pRule[i].srcEndPort = tuItem->srcEndPort;
pRule[i].destStartPort = tuItem->destStartPort;
pRule[i].destEndPort = tuItem->destEndPort;
}
currRules->append(tuItem);
}*/
/*CString temp;
temp.Format("%d",pRule[i].destStartIp);
AfxMessageBox(temp);*/
}
//MessageBox(t);
rlFile.Close();
return 0;
}
void IpRule::AddToList(ICMP_ITEM *item)
{
CString address;  ///IP,PORT;
m_iprulelist.InsertItem(pos,"");
m_iprulelist.SetItemText(pos,1,item->name);
/
/是否启用/////////////////////////////////
if(item->use)
ListView_SetCheckState(m_iprulelist.m_hWnd,pos,true);
////动作///////////////////////////
if(item->action == 1)
m_iprulelist.SetItemText(pos,2,"放行");
else
m_iprulelist.SetItemText(pos,2,"禁行");
//协议/////////////////////////////////////
if(item->Proto == 1)
m_iprulelist.SetItemText(pos,3,"ICMP");
else if(item->Proto == 6)
m_iprulelist.SetItemText(pos,3,"TCP");
else if(item
->Proto == 17)
m_iprulelist.SetItemText(pos,3,"UDP");
//方向///////////////////////////////////////////////
if(item->direction == 1)
m_iprulelist.SetItemText(pos,4,"传出");
else if(item->direction == 0)
电工工具袋
m_iprulelist.SetItemText(pos,4,"传入");
else 
m_iprulelist.SetItemText(pos,4,"出入");
//IP段//////////////////////////////////////////////////
if(item->destStartIp == 0)
m_iprulelist.SetItemText(pos,5,"任意");
else
{
address.Format("%s-->%s",inet_ntoa(*(in_addr*)&(item->destStartIp)),
inet_ntoa(*(in_addr*)&(item->destEndIp)));
m_iprulelist.SetItemText(pos,5,address);
}
//描述///////////////////////////
SetDlgItemText(IDC_DESCRIPTION,item->description);
pos++;
}
void IpRule::AddToList(TU_ITEM *item)
{
CString address;  ///IP,PORT;
m_iprulelist.InsertItem(pos,"");
m_iprulelist.SetItemText(pos,1,item->name);
//是否启用/////////////////////////////////
if(item->use)
ListView_SetCheckState(m_iprulelist.m_hWnd,pos,true);
/
///动作///////////////////////////
if(item->action == 1)
m_iprulelist.SetItemText(pos,2,"放行");
else
m_iprulelist.SetItemText(pos,2,"禁行");
//协议/////////////////////////////////////
if(item->Proto == 1)
m_iprulelist.SetItemText(pos,3,"ICMP");
else if(item->Proto == 6)
m_iprulelist.SetItemText(pos,3,"TCP");
else if(item->Proto == 17)
m_iprulelist.SetItemText(pos,3,"UDP");
//方向///////////////////////////////////////////////
if(item->direction == 1)
m_iprulelist.SetItemText(pos,4,"传出");
else if(item->direction == 0)
m_iprulelist.SetItemText(pos,4,"传入");
else 
m_iprulelist.SetItemText(pos,4,"出入");
//IP段//////////////////////////////////////////////////
if(item->destStartIp == 0)
m_iprulelist.SetItemText(pos,5,"任意");
else
{
address.Format("%s-->%s",inet_ntoa(*(in_addr*)&(item->destStartIp)),
inet_ntoa(*(in_addr*)&(item->destEndIp)));
m_iprulelist.SetItemText(pos,5,address);
}
//端口////////////////////////////////////////////////
if(item->destEndPort == 0)
m_iprulelist.SetItemText(pos,6,"任意");
else
{
address.Format("%d-->%d",item->destStartPort,item->destEndPort);
m_iprulelist.SetItemText(pos,6,address);
}
if(item->srcEndPort == 0)
m_iprulelist.SetItemText(pos,7,"任意");
else
{
address.Format("%d-->%d",item->srcStartPort,item->srcEndPort);
m_iprulelist.SetItemText(pos,7,address);
隐私保护通话
}
//描述///////////////////////////
SetDlgItemText(IDC_DESCRIPTION,item->description);
pos++;

本文发布于:2024-09-22 11:23:55,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/162051.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:规则   对话框   允许   返回   路由器   得到
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议