网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 软件工程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
本月文章推荐
.第三方模拟测试环境的搭建.
..NET中微软地图MapPoint2004编程.
.Deming的质量管理十大原则.
.SOA引发中间件市场新变局.
.UML在嵌入式系统设计中的应用(1).
.软件的架构与设计模式之层次原则.
.Objects as associative arrays.
.建模的价值.
.对项目开发中几种测试类型的理解.
.C++ virtual member function FAQ.
.面向对象软件开发的十大原则.
.在.NET 2.0 中使用自定义事务操作.
.感悟测试驱动开发.
.实现基于IDEA算法的加密工具(目录.
.SQA报告.
..NET Server 2003中的Microsoft群.
.SOA:构建更好的企业应用架构.
.技术专家带你您走出SOA六大误区.
.IBM推WebSphere软件及服务 继续推.
.BEA收购Fuego扩展SOA到BPM软件市.

Z5NTS功能之netstat(网络工具)

发表日期:2008-3-23


Z5NTS功能之netstat(网络工具)                Author:zfive5(zhaozidong) Eamil :zfive5@yahoo.com.cn       出于回忆一下网络编程的目的,开始写一个类似nettools的网络工具,当然 不能像nettools那样面面俱到,现在只能完成简单的netstat功能,大部分实现来 自于<<windows网络编程实例>>和网络,以前真的没有注重到iphlpapi.dll有如此 强大的功能!   功能界面如下:  Z5NTS功能之netstat(网络工具) 核心代码如下: typedef DWord (WINAPI *Z5AllocateAndGetTcpExTableFromStack) ( PMIB_TCPTABLEEX *pTcpTable, BOOL            bOrder,
HANDLE          hHeap, DWORD           dwZero, DWORD           dwFlag );   typedef DWORD (WINAPI *Z5AllocateAndGetUdpExTableFromStack) (  PMIB_UDPTABLEEX *pUdpTable,  BOOL            bOrder,  HANDLE          hHeap,  DWORD           dwZero,  DWORD           dwFlag  );   strUCt     ZF5NTSLook_S lineS; m_Line.clear();   Z5AllocateAndGetTcpExTableFromStack pAllocateAndGetTcpExTableFromStack; Z5AllocateAndGetUdpExTableFromStack pAllocateAndGetUdpExTableFromStack;   char szBUF[1024]; HMODULE hM=NULL; hM=LoadLibrary("iphlpapi.dll"); if(hM==NULL) {    return -1; }     pAllocateAndGetTcpExTableFromStack=(Z5AllocateAndGetTcpExTableFromStack)GetProcAddress(hM,"AllocateAndGetTcpExTableFromStack");
pAllocateAndGetUdpExTableFromStack=(Z5AllocateAndGetUdpExTableFromStack)GetProcAddress(hM,"AllocateAndGetUdpExTableFromStack");   PMIB_TCPTABLEEX ptcpmib=NULL; DWORD      dwSize=0;   //TCP if(pAllocateAndGetTcpExTableFromStack(&ptcpmib,TRUE,GetProcessHeap(),2,2)!=NO_ERROR) {    return -1; }   UINT i=0; for(i=0;i<       ptcpmib->dwNumEntries;i++) {     lineS.szLocal="";     lineS.szName="";     lineS.szRemote="";     lineS.szState="";     lineS.szType="";     lineS.dwPID=NULL;       switch(ptcpmib->table[i].dwState)     {      case  MIB_TCP_STATE_CLOSED:         lineS.szState="CLOSED";        break;      case  MIB_TCP_STATE_LISTEN:        lineS.szState="LISTEN";        break;
     case  MIB_TCP_STATE_SYN_SENT:        lineS.szState="SYN_SENT";        break;      case  MIB_TCP_STATE_SYN_RCVD:        lineS.szState="SYN_RCVD";        break;      case  MIB_TCP_STATE_ESTAB:        lineS.szState="ESTAB";        break;      case  MIB_TCP_STATE_FIN_WAIT1:        lineS.szState="FIN_WAIT1";        break;      case  MIB_TCP_STATE_FIN_WAIT2:        lineS.szState="FIN_WAIT2";        break;      case  MIB_TCP_STATE_CLOSE_WAIT:        lineS.szState="CLOSE_WAIT";        break;      case  MIB_TCP_STATE_CLOSING:        lineS.szState="CLOSING";        break;      case  MIB_TCP_STATE_LAST_ACK:        lineS.szState="LAST_ACK";        break;      case  MIB_TCP_STATE_TIME_WAIT:
        lineS.szState="TIME_WAIT";        break;      case  MIB_TCP_STATE_DELETE_TCB:        lineS.szState="DELETE_TCB";        break;      default:         lineS.szState="UNKNOWN";        break;      }        struct in_addr locIP;      struct in_addr RemIP;        locIP.s_addr=ptcpmib->table[i].dwLocalAddr;      RemIP.s_addr=ptcpmib->table[i].dwRemoteAddr;        sprintf(szBUF,"%s:%u",inet_ntoa(locIP),ntohs(ptcpmib->table[i].dwLocalPort));      lineS.szLocal=szBUF;        if(strcmp(lineS.szState.c_str(),"LISTEN")!=0)      {        sprintf(szBUF,"%s:%u",inet_ntoa(RemIP),ntohs(ptcpmib->table[i].dwRemotePort));      }      else      {        sprintf(szBUF,"%s:%u",inet_ntoa(RemIP),0);
     }        lineS.szRemote =szBUF;      lineS.szType="TCP";      lineS.dwPID=ptcpmib->table[i].dwProcessId;      m_Line.push_back(lineS); }   //UDP PMIB_UDPTABLEEX pudpmib=NULL; dwSize=0; if(pAllocateAndGetUdpExTableFromStack(&pudpmib,TRUE,GetProcessHeap(),2,2)!=NO_ERROR) {    return -1; }   for(i=0;i<       pudpmib->dwNumEntries;i++) {     struct in_addr locIP;       lineS.szLocal="";     lineS.szName="";     lineS.szRemote="";     lineS.szState="";     lineS.szType="";     lineS.dwPID=NULL;       locIP.s_addr=pudpmib->table[i].dwLocalAddr;     sprintf(szBUF,"%s:%u",inet_ntoa(locIP),ntohs(pudpmib->table[i].dwLocalPort));     lineS.szLocal=szBUF;
    lineS.szType="UDP";     lineS.dwPID=pudpmib->table[i].dwProcessId;     m_Line.push_back(lineS); }   //Snap HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(hProcessSnap==INVALID_HANDLE_VALUE) {    return -1; }   for(i=0;i<m_Line.size();i++) {    string strName;    PROCESSENTRY32 proEn;    proEn.dwSize=sizeof(proEn);    strName="*.???";    if(::Process32First(hProcessSnap,&proEn))    {      do      {        if(proEn.th32ProcessID==m_Line[i].dwPID)        {           m_Line[i].szName=proEn.szExeFile;           break;        }        } while(::Process32Next(hProcessSnap,&proEn));    } }
       ::CloseHandle(hProcessSnap);   if(ptcpmib!=NULL)  LocalFree(ptcpmib); if(pudpmib!=NULL)  LocalFree(pudpmib); if(hM!=NULL)      FreeLibrary(hM);   return 0;     下次要在z5nts上加上发送所有类型的icmp数据包的功能:)  
上一篇:对项目开发中几种测试类型的理解 人气:540
下一篇:企业信息化大路子是不是搞反了? 人气:335
浏览全部软件工程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐