网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
利用“侦听-转发”程序破译网管协议
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
,在CChatDlg类中加入对 按钮Listen的处理函数如下:

void CChatDlg::OnListen()

 {

  pClientSocket = new CClientSocket(this);

  if(pClientSocket != NULL)

   {

    if(!pClientSocket->Create(SNMP_SOCKET_PORT, SOCK_DGRAM))

      AfxMessageBox("Can not create ClientSocket !");

    else

      ::EnableWindow(GetDlgItem(IDC_LISTEN)-> m_hWnd,FALSE);

   }

  else

   {

    AfxMessageBox("Can not new ClientSocket !");

   }

 }

  注意:SNMP_SOCKET_PORT应设为161。 然后,在CClientSocket中加入 虚函数OnReceive的实作内容:

void CClientSocket::OnReceive(int nErrorCode)

 {

  CSocket::OnReceive(nErrorCode);

  unsigned char tmp[MAXTMPSIZE];

  //MAXTMPSIZE是自定义宏,可为1024;

  int i;

  int RecNum;

  UINT ClientPort;

  CString ClientAddress;

  if(m_bFirst)

   {

    m_bFirst = false;

    RecNum = ReceiveFrom(tmp, MAXTMPSIZE, ClientAddress, ClientPort);

    if(RecNum > 0)

     {

      TRACE("Received from client, %d bytes :\n", RecNum);

      for(i=0; i<RecNum; i++)

       {

        if(i%10==0)

          TRACE("\n%5d,", tmp[i]);

        else

          TRACE("%5d,", tmp[i]);

       }

      TRACE("\n\n");

      pDlg->CreateServerSocket(ClientAddress, ClientPort);

      pDlg->Send(true, tmp, RecNum);

     }

    else

      AfxMessageBox("Error: fail to Receive from client the first time!");

   }

  else

   {

    RecNum = Receive(tmp, MAXTMPSIZE);

    if(RecNum > 0)

     {

      TRACE("Received from client, %d bytes :\n", RecNum);

      for(i=0; i<RecNum; i++)

       {

        if(i%10==0)

          TRACE("\n%5d,", tmp[i]);

        else

          TRACE("%5d,", tmp[i]);

       }

      TRACE("\n\n");

      pDlg->Send(true, tmp, RecNum);

     }

    else

      AfxMessageBox("Error: fail to Receive from client!");

   }

  if(RecNum <= 0)

   {

    AfxMessageBox("Error: fail to Receive from client !");

    return;

   }

 }

  本段程序的大概意思是:如果本程序首次收到来自网管程序的UDP包,则要记录下它的Socket端口号和IP 地址,这是本程序最关键的地方之一。这样做的原因是:网管通讯开始时一般是由网管程序首先发出SNMP 请求包,所以要先响应网管程序;另一目的是由此获得事先未知的网管程序侦听的Socket端口号和IP地址,然后让CChatDlg由此创建CServerSocket。随后调用CChatDlg的Send函数将收到的UDP包转发给交换机,并在Output窗口按每行10个的格式显示出收到的数据。

  上段程序中CChatDlg的Send和CreateServerSocket函数的内容如下:

 

void CChatDlg::CreateServerSocket (CString address, UINT port)

 {

  m_ClientAddress = address;

  m_ClientPort = port;

  pServerSocket = new CServerSocket(this);

  if(pServerSocket != NULL)

   {

    if(!pServerSocket->Create(m_ClientPort, SOCK_DGRAM))

      AfxMessageBox("Can not creat

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号