黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 黑客编程 >> 正文
·完美空间提供500M免费AS04-10·企业安全之YY内网准入以04-09
·企业安全之意识与策略04-09·剑走偏锋:IIS漏洞利用04-09
·我来免费网提供100M免费04-09·1122mb.com提供20G超大免04-08
·映像劫持与反劫持技术04-07·让所有"暴力删除工具"无04-07
·入侵88red系统的详细过程04-07·Sql Injection脚本注入终04-07
·vbs+delphi 反弹后门生成04-07·飞讯网提供100MB免费PHP04-07
·突破SQL注入攻击时输入框04-04·结合内核和病毒技术的最04-04
·Real Player rmoc3260.d04-04·亿万网络今月最后为您提04-04
·php+mysql 5 sql inject04-03·Real Player rmoc3260.d04-03
·oblog文件下载漏洞04-03·免费啦提供1G-2G免费全能04-03
·完全解析网页后门和挂马04-02·一句话开3389(只测试过04-02
·萧萧免费空间网提供100M04-02·谷道免费空间网提供1G免04-01
·从本地入手解决双线路由03-31·sablog 1.6 多个跨站漏洞03-31
·富文本编辑器的跨站脚本03-31·Cookie注入是怎样产生的03-31
[推荐]如何让你的程序安全通过windows防火墙
      ★★★★★

如何让你的程序安全通过windows防火墙

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2007-8-20 9:25:13
大家开发网络程序,经常要连接其他主机,如果在xp上运行,一定会提示你,只有选择解除阻止才能实现正常的网络连接.那么有没有办法在防火墙的例外列表里面通过编程的方式加入自己的程序呢?
 当然有了,不然就不要介绍了
xp的系统目录下面有个hnetcfg.dll就是这个编程接口,头文件是netfw.h,初始化代码如下:
INetFwProfile* m_pFireWallProfile=NULL;


 HRESULT hr  =  S_FALSE;
    INetFwMgr *  fwMgr  =  NULL;
    INetFwPolicy *  fwPolicy  =  NULL;

    FW_ERROR_CODE ret  =  FW_NOERROR;
     try 
       {
         if ( m_pFireWallProfile )
             throw  FW_ERR_INITIALIZED;

         //  Create an instance of the firewall settings manager. 
         hr  =  CoCreateInstance( __uuidof(NetFwMgr), NULL, CLSCTX_INPROC_SERVER, __uuidof( INetFwMgr), ( void ** ) & fwMgr );

         if ( FAILED( hr ))
             throw  FW_ERR_Create_SETTING_MANAGER;

         //  Retrieve the local firewall policy. 
         hr  =  fwMgr -> get_LocalPolicy(  & fwPolicy );
         if ( FAILED( hr ))
             throw  FW_ERR_LOCAL_POLICY;

         //  Retrieve the firewall profile currently in effect 
         hr  =  fwPolicy -> get_CurrentProfile(  & m_pFireWallProfile );
         if ( FAILED( hr ))
             throw  FW_ERR_PROFILE;

    } 
     catch ( FW_ERROR_CODE nError)
      {
        ret  =  nError;
    } 
 
     if ( fwPolicy )
        fwPolicy -> Release();
     if ( fwMgr )
        fwMgr -> Release();

     return  ret; 将程序名称加入例外列表:
WinXPSP2FireWall::AddApplication( const wchar_t* lpszProcessImageFileName, const wchar_t* lpszRegisterName )
{
    FW_ERROR_CODE ret = FW_NOERROR;
    HRESULT hr;
    BOOL bAppEnable;
    BSTR bstrProcessImageFileName = NULL;
    BSTR bstrRegisterName = NULL;
    INetFwAuthorizedApplication* pFWApp = NULL;
    INetFwAuthorizedApplications* pFWApps = NULL;

    try
    {
        if( m_pFireWallProfile == NULL )
            throw FW_ERR_INITIALIZED;
        if( lpszProcessImageFileName == NULL || lpszRegisterName  == NULL )
            throw FW_ERR_INVALID_ARG;

        // First of all, check the application is already authorized;
        FW_ERROR_CODE  nError = this->IsAppEnabled( lpszProcessImageFileName, bAppEnable );
        if( nError != FW_NOERROR )
            throw nError;

        // Only add the application if it isn't authorized
        if( bAppEnable == FALSE )
        {
            // Retrieve the authorized application collection
            hr = m_pFireWallProfile->get_AuthorizedApplications( &pFWApps );
            if( FAILED( hr ))
                throw FW_ERR_AUTH_APPLICATIONS;

            // Create an instance of an authorized application
            hr = CoCreateInstance( __uuidof(NetFwAuthorizedApplication), NULL, CLSCTX_INPROC_SERVER, __uuidof(INetFwAuthorizedApplication), (void**)&pFWApp);
            if( FAILED( hr ))
                throw FW_ERR_Create_APP_INSTANCE;

            // Allocate a BSTR for the Process Image FileName
            bstrProcessImageFileName = SysAllocString( lpszProcessImageFileName );
            if( SysStringLen( bstrProcessImageFileName ) == 0)
                throw FW_ERR_SYS_ALLOC_STRING;

            // Set the process image file name
            hr = pFWApp->put_ProcessImageFileName( bstrProcessImageFileName );
            if( FAILED( hr ) )
                throw FW_ERR_PUT_PROCESS_IMAGE_NAME;

            // Allocate a BSTR for register name
            bstrRegisterName = SysAllocString( lpszRegisterName );
            if( SysStringLen( bstrRegisterName ) == 0)
                throw FW_ERR_SYS_ALLOC_STRING;
            // Set a registered name of the process
            hr = pFWApp->put_Name( bstrRegisterName );
            if( FAILED( hr ))
                throw FW_ERR_PUT_REGISTER_NAME;
            
            // Add the application to the collection
            hr = pFWApps->Add( pFWApp );
            if( FAILED( hr ))
                throw FW_ERR_ADD_TO_COLLECTION;
        }
    }
    catch( FW_ERROR_CODE nError )
    {
        ret = nError;
    }

    SysFreeString( bstrProcessImageFileName );
    SysFreeString( bstrRegisterName );

    if( pFWApp )
        pFWApp->Release();
    if( pFWApps )
        pFWApps->Release();

    return ret;
}
文章录入:cainiaowang    责任编辑:cainiaowang 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886