存档

‘Windows’ 分类的存档

SIP协议之ReSIProcate环境搭建

2010年1月7日

  这几天在研究SIP协议,并使用开源ReSIProcate搭建了一个简单的测试环境。现在分享给大家,希望对同样研究SIP协议的朋友有一些帮助。

  • 首先下载resiprocate的最新版本:目前是resiprocate-1.6。
  • 取消resiprocate-1.6目录的只读属性,同时 删除resiprocate-1.6目录下的.svn文件夹。此文件夹是隐藏的,需要在Windows系统中设置一下让它显示出来。
  • 然后使用Visual Studio 2008打开resiprocate-1.6下的reSIProcate_9_0.sln解决方案。 
  • 右击reSIProcate_9_0解决方案下的resiprocate项目,选择重新生成,等编译完成后,会在resiprocate-1.6\repro\Debug下生成repro.exe可执行文件。
  •  拷贝resiprocate-1.6\contrib\popt\win32下的libiconv-2.dll、libintl-2.dll、popt1.dll三个dll文件到resiprocate-1.6\repro\Debug。即将libiconv-2.dll、libintl-2.dll、popt1.dll三个dll文件与repro.exe放到同一个目录下,否则repro.exe执行时会出错。
  •  启动一个命令行(控制台)窗口,导航到resiprocate-1.6\repro\Debug目录下,运行repro.exe文件。
  •  打开浏览器,输入地址:http://127.0.0.1:5080。可以看到登录页面:
  • 点击登录链接,输入用户名和密码(均为admin)。出现设置页面。
  •  设置域名:如果是在局域网,域名直接设置为IP地址,如127.0.0.1。点击Add按钮添加域名。
  •  添加用户:这个比较简单,见图所示。注意填写密码。其它选项暂时可以不用去管。如此这样添加两个用户,方便下面对BasicCall项目进行测试。 
  • 右击reSIProcate_9_0解决方案下的basicCall项目,选择重新生成,并设置为启动项目。等编译完成后,右击basicCall项目,选择属性,在弹出的basicCall属性页对话框中,设置basicCall项目的命令行参数。
  •  在basicCall项目中注释掉#define NO_REGISTRATION 1一句。并且,对main函数的开头做如下发动,将日志输出到文件中。
  •  运行basicCall项目,等程序运行结果后,会在resiprocate-1.6\resip\dum\test目录下看到basicCall.txt文件,可以对其进行分析。

  更详细的带图的步骤见这个文章:SIP协议之reSIProcate环境

   首发张文杰的博客:http://zhangwenjie.net(转载请保留)

Windows ,

再谈内存泄露的问题

2010年1月7日

  C/C++中的内存泄露问题一直是困扰C/C++程序员的顽疾。于是出现了各种内存泄露检测方法、工具、程序。下面我一个简单的内存泄露检测程序。它并不能解决所有问题,不过它可以在有内存泄露时,在程序结束的输出(如Visual Studio的输出窗口)中,打出诸如哪个文件、第几行、内存泄露的大小的信息,方便进行问题解决。代码如下:

#if !defined(WINLEAKCHECK_H)
#define WINLEAKCHECK_H

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define new   new( _NORMAL_BLOCK, __FILE__, __LINE__)

class FindMemoryLeaks
{
    _CrtMemState m_checkpoint;
public:
    FindMemoryLeaks()
    {
        _CrtMemCheckpoint(&m_checkpoint);
    };
    ~FindMemoryLeaks()
    {
        _CrtMemState checkpoint;
        _CrtMemCheckpoint(&checkpoint);
        _CrtMemState diff;
        _CrtMemDifference(&diff, &m_checkpoint, &checkpoint);
        _CrtMemDumpStatistics(&diff);
        _CrtMemDumpAllObjectsSince(&m_checkpoint);
    };
};
#endif

  使用方法如下:

int main(int argc, char** argv)
{
    FindMemoryLeaks fml;
    {
        //在这里放置你的代码;
     }
}

  如果程序中确实有内存泄露的代码,那么在程序运行结束后输出窗口会显示如下信息:

0 bytes in 0 Free Blocks.
268 bytes in 7
Normal Blocks.
6796 bytes in 10 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 340104 bytes.
Total allocations: 1494583 bytes.
Dumping objects ->
d:\data.cxx(316) : {1419} normal block at 0x02156168, 19 bytes long.
Data: <DialogUsageManag> 44 69 61 6C 6F 67 55 73 61 67 65 4D 61 6E 61 67
d:\data.cxx(316) : {1391} normal block at 0x02155668,
      20 bytes long.
Data: <Request/Status l> 52 65 71 75 65 73 74 2F
      53 74 61 74 75 73 20 6C
  可以看到,可以看到信息中包含了文件名、行数、内存泄露大小。
  首发张文杰的博客:http://zhangwenjie.net (转载请保留)

Windows ,

在C#中使用GnuPG加密文件

2010年1月4日

  PGP可以解释为Pretty Good Privacy(汉语翻译:相当好的隐私),是PGP公司的加密和/或签名工具套件,使用了有商业版权的IDEA算法并集成了有商业版权的PGPdisk工具,有别于开源的GPG(GnuPG)。PGP的主要开发者为菲利普·齐默曼(Philip R. Zimmermann)。齐默曼在志愿者的帮助下,突破政府的禁止,于1991年将PGP在因特网上免费发布。

  PGP是一个桌面工具,在程序中使用相当不便。好在我们可以使用开源的GPG(GnuPG)在程序代码中写成文件加密。详见如下代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //EncryptPGP();
            Stopwatch sw = new Stopwatch();
            sw.Start();
            DecryptPGP();
            sw.Stop();
            Console.WriteLine(sw.Elapsed);

            Console.WriteLine("OK");
            Console.Read();
        }
        public static void EncryptPGP()
        {
            ProcessStartInfo pInfo = new ProcessStartInfo();
            pInfo.FileName = @"E:\Test\GnuPGDotNet\GnuPG\gpg.exe";
            pInfo.Arguments = string.Format("  --homedir \"{0}\" --yes --always-trust
             --keyring \"{1}\"  --output \"{2}\" -r zhangwenjie  --encrypt \"{3}\"",
              @"E:\Test\GnuPGDotNet\GnuPG", @"F:\Test\pubring.pkr",
               @"F:\Test\License.txt.pgp", @"F:\Test\License.txt  ");
            pInfo.CreateNoWindow = true;
            pInfo.UseShellExecute = false;

            pInfo.RedirectStandardInput = true;
            pInfo.RedirectStandardOutput = true;
            pInfo.RedirectStandardError = true;
            Process p = Process.Start(pInfo);

            string strInfo;
            while ((strInfo = p.StandardOutput.ReadLine()) != null)
            {
                Console.WriteLine(strInfo);
            }

            p.WaitForExit();

            if (p.ExitCode == 0)
            {
                Console.WriteLine("成功");
            }
            p.Close();

        }
        public static void DecryptPGP()
        {

            ProcessStartInfo pInfo = new ProcessStartInfo();
            pInfo.FileName = @"E:\Test\GnuPGDotNet\GnuPG\gpg.exe";
            pInfo.Arguments = string.Format("  --homedir \"{0}\" --keyring \"{1}\"
           --secret-keyring \"{2}\" --passphrase-fd 0 --output \"{3}\" --decrypt \"{4}\"",
             @"E:\Test\GnuPGDotNet\GnuPG", @"F:\Test\pubring.pkr",
             @"F:\Test\secring.skr", @"F:\Test\Oracle 9i.rar", @"F:\Test\Oracle 9i.rar.pgp");
            pInfo.CreateNoWindow = true;
            pInfo.UseShellExecute = false;
            pInfo.RedirectStandardInput = true;
            pInfo.RedirectStandardOutput = true;
            pInfo.RedirectStandardError = true;
            Process p = Process.Start(pInfo);

            p.StandardInput.WriteLine("123456789");
            p.StandardInput.Flush();
            p.StandardInput.Close();

            string strInfo;
            while ((strInfo = p.StandardOutput.ReadLine()) != null)
            {
                Console.WriteLine(strInfo);
            }

            p.WaitForExit();

            if (p.ExitCode == 0)
            {
                Console.WriteLine("成功");
            }
            p.Close();
        }
    }

}

   其中:pubring.pkr和secring.skr是两个预先生成好的key文件。p.StandardInput.WriteLine(“123456789″);用来输入解密密码的。

  希望本文对希望在C#中使用PGP的朋友的帮助。

  本文首发地址张文杰博客:http://zhangwenjie.net(转载请保留)

Windows , , , , ,

关于Google网站被baidu"劫持"的问题

2009年12月12日

  由于公司的电脑不能直接上网,要想查资料需要去专门上网的公用机上才行。

  这几天发现在公用机的IE浏览器上输入Google的主页时,打开的页面却是baidu的页面,但在同一机器上的Google Chrome浏览器却没有出现同样的问题。这时大家都认为Google网站被”baidu”劫持了。

  出现这种输入一个网址却出现另一个网址网页的现象的原因一般来说只有一个,那就是修改了C:\windows\system32\drivers\etc\hosts文件。修改成了类似如下的记录:

 

xxx.xxx.xxx.xxx  www.google.com
xxx.xxx.xxx.xxx  www.google.cn

  这样IE浏览器在发送网址请求时,会先去检查这个hosts文件,如果发现了相应的网址被指定到一个具体IP地址,那么它不再去解析DNS来获取真正的地址,而是直接使用hosts中指定的IP地址,于是就会出现了”劫持”现象,即输入一个网址却出现另一个网址网页的现象。

  那么为什么Google Chrome浏览器为什么不会出现”劫持”的现象呢?应该是Chrome浏览器根本不会去检查什么hosts文件,而是直接请求DNS解析,这样一定不会错的。

  这样现象在Linux系统上的Firefox浏览器也会出现。Linux系统上的hosts文件位于/etc/hosts。不管在Windows上还是在Linux上遇到这样的现象,大家还是先去看一下hosts文件是否被修改,说不好还真能解决问题。

Linux, Web, Windows , , , , , , ,

Windows 8?Office 15?这世界变化太快?

2009年12月5日

  前两天看到一个消息说微软正在招募Windows 8的开发人员,该人员必须有5年工作经验之类云云的消息。今天又看到在Office 2010还在Beta版的时候,Office 15传言。不得不感叹,微软的软件更新太快了。我的Office 2007才刚用上呀。

  大家都知道Windows 7刚刚发布,Office 2010还在Beta版,Visual Studio 2010也还在Beta版,Siverlight 4同样在Beta版那么现在就计划并放风下一代Windows及Office是不是有点早?同样也会给人一种好多这些软件版本是过渡的一样。

  大家看看这篇巩博客吧:Access 15 and SQL Server.这里是中文译文.

Windows , , , , , ,

27家主流媒体对Windows7的评论大汇集

2009年10月23日

   windows 7 终于发布了。但也只是才刚刚发布,所以现在就对其进行总结评论显然为时过早,我们只能说这款操作系统目前看来比Vista要优秀许多,而且如果你使用的 是PC机,那么Windows7无疑会是你升级操作系统的最佳选择。除此之外,让我们看一看27家主流媒体对这款操作系统是如何评价的

  CNET:”Windows7是一个稳定可靠的平台,足以与Mac OSX竞争,它的诞生代表微软仍有能力推出强势,有效的操作系统。“

  PCWorld:“…我测试的Windows7最终零售版看起来足以担当Windows XP/Vista继任者的角色。”

  《纽约时报》:“(微软)三年以来的Vista噩梦终于结束了”

  IT Pro:“Windows7内部做了许多改进,是一款合格而又功能丰富的操作系统,其用户界面也在相当吸引人的同时有利于提高工作效率。”

  BIT-TECH:”微软对Vista进行了彻头彻尾的大改造,由此得来的Windows7则将是有史以来最好的操作系统!”

  Guardian:“Windows7将是最好的Windows操作系统。”

  Slate:“实际上,新款操作系统不仅是微软最好的一款产品,而且还是现今市面上最快,最好用和最有用的消费级桌面操作系统。”

  Maximum PC:”..Windows7毫无疑问是微软发布的最好的一款Windows操作系统,它才是XP的真正接班人。”

  Tech Radar:“没有哪一个版本的Windows操作系统是完美无缺的,但Windows7显然是迄今为止发布的一款最优秀的Windows操作系统.”

  PC Mag:”Windows7是迄今为止我们所见到的微软最好的一款操作系统.”

 《华尔街日报》:”Windows7是微软出品的最好的一款Windows操作系统。”

  ElectricPig:“微软想用Windows7来证明他们终于走回了正轨,而我们也有同感。”

  瘾科技:“尽管Vista给人的感觉是一塌糊涂,但是Windows7则修改了Vista的许多漏洞和缺点,这款操作系统内部紧密结合,可谓表里一致。”

  Telegraph:“Windows7完成了Vista无法完成,但本应完成的使命…”

  Hexus:”。。。这才是Windows操作系统该有的样子!”

  Digital Trends:“Windows7拯救了微软,而这项任务本应由Vista来完成…”

  美联社:”Windows7魅力非凡,而且进行了许多改进,他的出现使Vista的负面效应烟消云散。”

  V3:”…Windows7是XP的优秀继任者…”

  Federal Computer Week:”Windows7几乎完美无缺,而且我们一直认为Vista的质量比它的名声要好得多。”

  PC Pro UK:“我们非常非常喜欢Windows7,而对Vista的抱怨已被我们抛到九霄云外…”

  Technodorm:“资金富足的用户没有理由不升级到Windows7.”

  Laptop Mag:“如果Vista令你对Windows操作系统大失所望,那么我们建议你赶快升级到Windows7.”

  Cult of Mac:”我快要得红眼病了!”

  The Inquirer:“Windows7和苹果的操作系统不相上下,一样的便于使用,一样的智能化。”

  Computer World:“终于到了升级的时间…”

  TechWorld:”感觉Windows7好像是一款反Vista操作系统…”

  Gizmodo:”如果你从XP升级到Windows7,那么你会觉得Windows7系统环境具有强烈的未来气息;而如果你是从Vista升级而来,你会感觉Windows7比Vista优秀许多。即使是最死忠的Mac用户,在面对Windows7时也将不得不改变一下原先那种高傲的姿态。”

  至少听上去很美,不是吗?

       摘自:http://www.cnbeta.com/articles/96172.htm

Windows ,

微软明日将发布新一代操作系统Windows 7

2009年10月21日
Microsoft Windows 7

Microsoft Windows 7

         备受关注的下一代Windows操作系统Windows 7将于美国当地时间22日上市.虽然种种迹象表明,微软将采取务实态度低调发布Windows 7,但微软还是对于这款精心打造的操作系统寄予了厚望。

  据国外媒体报道,微软新操作系统Windows 7将于周四上市销售,这款意义重大的产品是微软数千员工花了三年时间打造出来的.10月22日举行的Windows 7发布会将由微软CEO史蒂夫·鲍尔默(Steve Ballmer)亲自主持.所有迹象表明,这将是一场务实、注重效率的推广活动。

  无论是经济危机影响所致,还是微软的商业策略使然,鉴于Windows Vista的教训,微软采取一种更务实的态度推广Windows7并不足为奇.微软对即将上市的Windows7的期望不言而喻,但CEO鲍尔默却称,Windows7将推动PC市场需求,但幅度不会很大。

  虽然鲍尔默表现的很低调,但Windows系列还是有相当多的粉丝,据台湾媒体报道,虽然距离微软启动Windows 7系统的首卖仪式还有一段时间,但已经有用户提前80小时就开始排队等候了

  报道称,Windows 7操作系统从外观到性能均得到了业内外人士的认可,不同于Vista系统,Windows 7至今还没有上市就受到大量用户的追捧.这款新的操作系统在提升内存效能,降低电力消耗,减少内存资源需求,提升开关机速度方面,有了明显的提升.触控功能的加入,使这款产品增加了新的亮点。

  据国外媒体报道称,微软在Windows 7的研发过程中吸取了Vista的教训,负责各个方面的研发人员加强了协作,而沟通不畅在一定程度上导致了Windows Vista的延误和缺陷问题.微软CEO鲍尔默(Steve Ballmer)还要求软件开发人员与惠普等其他电脑厂商更为密切地进行合作,防止出现困扰Vista的那些问题。

  虽然此前评测人员都对Windows 7给出了积极的评价,但现在断言这一新系统的成败还为时尚早,一切还有待市场和用户给出结论。

windows 7

windows 7

Windows , ,

关于VMware 6.5 build 118166的序列号

2009年8月15日

        前几天从这里安装了Windows Server 2008 R2,见下图:

Untitled

         这里插一句,我自己一句喜欢在我的笔记本上安装Windows Server版本,如Server 2003,Server 2008,个人觉得比xp好用。

         今天在Server 2008 R2中使用VMware 6.5 build 118166虚拟机时,提示缺少msvcr71.dll文件,无法启动。安装Visual Studio 2008也不管用。最后从网上下载msvcr71.dll,放到虚拟机目录中,然后就可以了。

         在启动虚拟机RHEL 5.3虚拟机时,出现了以前从没有出现的问题:要求输入序列号才能启动,见下图:

v

v

  从网上找了N个序列号,皆不起作用。直到现在在我的Windows Server 2008 R2系统上无法启动RHEL 5.3虚拟机。

  问题是此虚拟机在windows xp系统上可以正常启动,不需要输入序列号。

  如果有朋友解决了此问题,烦请指教一二。谢谢了。

Windows , , , ,