2009年2月28日星期六

How to open multiple files through single ifstream object?

怎样在定义了一个ifstream对象的情况下,打开多个文件。
重点:
每次打开新文件前,确保上一次的文件对象在close()之前被clear()!
// declare one ifstream object for every file

ifstream FileObject;

//open a input file which contain names of all files

ifstream InputFile("Input.txt");

while(std::getline(InputFile,buf)){
std::string name=buf;
FileObject.open(name.c_str());
if (!FileObject.is_open()){
//report error here.
continue;
}
while(std::getline(FileObject,buf2))
{ //doing some validation operations. }
//Clear the fileobject for next use
FileObject.clear();
//Prepare for next open,每次打开前都要clear和close
FileObject.close();
}

2009年2月27日星期五

怎样转换各种String 类型

How to: Convert Between Various String Types
这是MSDN中的内容,在各种不同的string类型间转换,包括System::String和标准C++中的std::string间的转换。
This topic demonstrates how to convert various Visual C++ string types into other strings. The strings types that are covered include char *, wchar_t*, _bstr_t, CComBSTR, CString, basic_string, and System..::.String. In all cases, a copy of the string is made when converted to the new type. Any changes made to the new string will not affect the original string, and vice versa.

// convert_from_char.cpp
// compile with: /clr /link comsuppw.lib

#include
#include
#include

#include "atlbase.h"
#include "atlstr.h"
#include "comutil.h"

using namespace std;
using namespace System;

int main()
{
char *orig = "Hello, World!";
cout << orig << " (char *)" << endl; // Convert to a wchar_t*
size_t origsize = strlen(orig) + 1;
const size_t newsize = 100;
size_t convertedChars = 0;
wchar_t wcstring[newsize];
mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE);
wcscat_s(wcstring, L" (wchar_t *)");
wcout << wcstring << endl;
// Convert to a _bstr_t
_bstr_t bstrt(orig);
bstrt += " (_bstr_t)";
cout << bstrt << endl;
// Convert to a CComBSTR
CComBSTR ccombstr(orig);
if (ccombstr.Append(L" (CComBSTR)") == S_OK)
{ CW2A printstr(ccombstr); cout << printstr << endl; }
// Convert to a CString
CString cstring(orig);
cstring += " (CString)";
cout << cstring << endl;
// Convert to a basic_string
string basicstring(orig);
basicstring += " (basic_string)";
cout << basicstring << endl;

// Convert to a System::String
String ^systemstring = gcnew String(orig);
systemstring += " (System::String)";
Console::WriteLine("{0}", systemstring);
delete systemstring;
}

2009年2月26日星期四

修改堆栈的大小,避免程序调用函数时出现System.StackOverflowException错误

System.StackOverflowException异常通常出现在死循环处。
但是这次我的程序显示异常出现在程序定义行,因为我有一个类里面定义了一个很大的数组。
C#等编译器在编译的时候并没有修改堆栈大小的选项,默认的堆栈大小是1MB,但是可以通过
EditBin.exe程序修改默认的堆栈大小。
如某人的测试:

That works.

Test:

class App {
private static long _Depth = 0;

private static void GoDeep() {
if ((++_Depth % 10000) == 0) System.Console.WriteLine("Depth is " +
_Depth.ToString());
GoDeep();
return;
}

public static void Main() {
try {
GoDeep();
} finally {
}
return;
}
}




editbin /stack:100000,1000 q.exe
Depth is 10000
Depth is 20000

Unhandled Exception: StackOverflowException.

editbin /stack:1000000,1000 q.exe
Depth is 10000
Depth is 20000
Depth is 30000
Depth is 40000
Depth is 50000
Depth is 60000
Depth is 70000
Depth is 80000

Unhandled Exception: StackOverflowException.

2009年2月16日星期一

破解封杀ADSL路由器解决办法全剖析(1)

http://hi.baidu.com/zhxliang521/blog/item/67b2db178da9650cc93d6db5.html

菏泽这边终于开始也封路由器了(为什么要说“终于”?)公司的宽带停了三天,在答应一台线路上一台主机之后,又开通了。

现在我用的是安装共享神盾的方法,17台机器,没问题。如果这方法不行,建议用一下共享卫士(我暂时还没试用,等试用之后再发测试结果)

长久来看,没有什么特别好的办法可以破解,因为网尖(网络尖兵)、南信(南京信风)均属于新兴产品,官方也属于测试阶段,也在不断的升级其自身程 序。就济南而言,没有用网尖就是大幸了,那个东西很据说BT(根椐同一时间内连接数),早在3月份的时候就有外地网友向我求助,当时还有星空极速(对密码 二次加密)拔号软件的。后来也上网查了一些资料,可以说当时那些软件极不成熟,随着破解方法在网络上公布,官方也及时升级了软件。这是一场没有硝烟的战 争。

以下内容是整理的对付网通、电信、铁通封路由、禁止共享上网的最新办法!供大家参考。

最新:常规方法已经无法突破电信ADSL共享封杀

最近桂林市网通、电信、铁通开始对桂林几个重点片区封路由了。这些片区一旦使用路由,TCP连接马上会返回到自己机子(127.0.0.1)来阻止 你上网两分钟。UDP连接,比如说QQ,浩方,可以正常使用。网上传说的方法都已无效。个人做过了一些尝试,现将经历写下,希望高手们能够发现问题。

1、关闭snmp161,162端口,无效,电信立刻能发现你还是在使用路由。

2、把内网机器的网卡MAC都设置成猫的MAC,保持整个网络只有两个MAC地址(PPPOE拨号最少需要两个MAC,一个是网卡MAC,一个是虚拟拨号MAC),无效,还是马上被封掉。已证明电信不是通过侦查MAC来发现路由。

3、通过路由器,只用一台机子A上网,网络OK;用两台A和B同时上网,则会被封。在机器A上打开共享和虚拟网卡,设置网关使机器B通过机器A,机 器A则经过路由来上网,(这样对于路由器来说,只有一台机器连接上网)还是被封。这说明,电信不是通过扫描终端电脑端口来发现是否使用路由,而应该是拦截 数据包进行分析来反路由。

4、使用机器A直接上网,没有使用原带的ICS和NAT协议,而是用另外下载的NAT32增强协议来制作网络共享,机器B通过A上网,马上被封。所 有机器安装防火墙,开到最高级防护,关闭了几乎所有端口,无效,同样被封。使用其他第三方共享协议,比如使用过Homeshare里的Inet制作共享, 同样被封。

5、机器A上网,使用CCproxy软件打开Http和Socks5代理,机器B网页使用Http代理,程序使用Socks代理转换,两个机器都可以上网,没有被封,但使用起来相当麻烦,而且Sock5代理转换不适用于所有程序。

6、机器A单机上网,打开共享,在机器A上安装Vmware和Virtual PC,虚拟的电脑使用真实网卡共享连接(不是使用虚拟机默认的虚拟网卡,而是把虚拟的电脑修改成为真实的局域网里的一部分),虚拟的电脑都有自己不同的网 卡,使用不同的MAC,按理说应该被封,但是却能正常上网。这说明电信对数据包的分析已经达到了最底层,甚至与协议、系统可能都没有关系,应该和机器的真 实物理硬件上的某些数据有关系。(再次申明不是网卡MAC和网卡的牌子等等)

7、以上各种方法综合使用,同样无效。现在可以解决的方法只有:能否用UDP协议通过某种代理完全代替TCP(像QQ那样),或者我们从底层去掉不 同电脑之间的数据的不同,用端口来区分内网机器(电信不是通过端口来侦测,我曾在一台机器上运行老式BT软件打开近千个端口同时连接也没有被封)

希望对网络底层协议有了解和有经验的朋友,根据我提供的信息,进行一下分析,共同寻找解决办法。网上写的一些方法都已无效。全国大面积封路由的时代 很快就要来了。现在电信,网通正在各地进行试点,他们使用的也不是网络尖兵,而是他们内部称为反代理服务器的东西。开发共享软件的朋友,也有一个很好的机 遇在等着你们。

破解封杀ADSL路由器解决办法全剖析(2)

破解方法一:用共享神盾软件

共享神盾(ShareShield),它的功能很专一,就是为了破解电信和网通等运营商对用户的宽带共享的限制。官方下载地址:http://www.sd002.com/shareshield.htm

如果对宽带共享比较关注一点的兄弟应该听说过,有很多运营商都上了一套叫“网络尖兵”的设备,这种设备很神奇,通过它运营商就可以知道一条宽带下面带了多少台机器,如果机器数比较多,运营商就会找上门了。

对于运营商的这种限制,大家都表示很气愤,但是又拿不出一个解决问题的技术手段来,所以说,这个软件是生逢其时阿。

软件的帮助很简单,里面提到每台共享上网的机器都需要安装这个软件(这个是自然啦),然后如果是代理服务器的话,那么代理服务器上不需要安装,如果是宽带路由器,那就更不用做特殊处理了。

被运营商限制的兄弟们,赶紧来体验一下,看看效果如何吧!

步骤1:关闭路由器或者代理服务器SNMP服务。
--如果你是使用宽带路由器上网,那么在宽带路由器中要关闭SNMP协议,具体请参考路由器使用手册。
--如果你是使用代理服务器上网,那么在代理主机中要关闭SNMP协议,可以通过卸载SNMP服务也可以通过防火墙来禁用161端口来实现。

步骤2:在每台使用共享宽带上网的主机上安装“共享神盾”。
--共享神盾完全免费。
--共享神盾专门针对“网络尖兵”设备开发,可以对用户的数据进行隐藏和整流,从而使得“网络尖兵”无法探测到共享主机数量。

“共享神盾”突破共享上网限制的原理是这样:ISP主要是通过类似“网络尖兵”、“信风”等检测软件来限制用户共享上网,当用户主机被检测到发送的 数据报文不一致时,检测软件将会认为有多台主机共享上网,于是进行封锁。“共享神盾”的原理就是让共享上网的所有主机以一致的方式进行报文伪装,“骗 ”ISP以为只有一台电脑在上网。

目前,“共享神盾”最新版本是1.3Beta,不过在安装过程可能会出现微软硬件驱动程序检测的警告而无法安装,我们可以在安装前关闭驱动程序检测 功能,方法是:在桌面上右击“我的电脑”,然后依次点击“属性”→“硬件”→“驱动程序签名”,最后在打开的“驱动程序签名”窗口中选中“忽略-安装软 件,不用征求我的同意”项即可。

所有共享上网的电脑安装好“神盾”后,需要共同启动“共享神盾”,成功启动后保持默认设置即可突破ISP共享上网的限制。在其中一个主机中可以在软件主窗口中看到网络的运行状态。

不过,有的用户在启动“神盾”时并非一帆风顺,可能会出现“启动转发器失败”的提示,这主要是由于主机中不止有一个网卡,这时在出现“启动共享神盾 转发器失败”提示窗口中点击“确定”,进入该界面后点击左侧“突破共享限制”项,然后在右侧“请选定用来上网的网络接口”下选择用来上网的网卡,最后保存 配置并重新启动“共享神盾”即可。

如果仍然不能解决问题,那么请到系统SYSTEM32文件夹中删除wpcap.dll和packet.dll文件,另外在SYSTEM32文件夹下 的 “drivers”子文件夹中删除npf.sys文件,重新启动系统后,再到共享神盾安装目录中运行winpcap.exe程序。

破解封杀ADSL路由器解决办法全剖析(3)

破解方法二:升级路由器软件,采用特殊拨号

注意:这种方法不是所有的路由器都可以,具体的去你品牌的官方网站查询,或打电话给客服。升级软件有危险,各位同志谨慎行事!

【以下方法经本人测试,在菏泽只有正常拨号才能上去,特殊拨号模式1、2、3都不行。】

今天去TP-LINK的官方站点看有没有新的升级文件出来,果然看到了20070110的新版本,升级后里面多了《IP与MAC绑定》,但更让我惊喜的特殊拨号模式已经细分了特殊拨号模式1和特殊拨号模式2,估计是针对不同地区的拨号方法。

经过测试发现特殊拨号模式1是XIAN Vnet authentication(估计是西安地区),特殊拨号模式2是HUBEI Vnet authentication,因为我是湖北地区,在我选择了模式2后不需要加前缀~就可以直接拨号上网,看来对中国电信的流氓行径看不惯大有人在。

因为根据测试和收集的信息,好像每个地区甚至每条线路的前缀都不一样,这样就不需要抓包探测或者测试加前缀就能直接上网了哦,的确方便了许多,配合以前升级时就有的主机伪装功能,破解了对多机共享的限制,宣告了中国电信星空极速和南京信风软件的彻底失败。

感谢TP-LINK为用户想的更多,因为我的影响,至此,我家,办公室,老婆家,老婆办公室,我舅舅家,舅舅公司,表哥家全部都使用TP-LINK 的产品:TL-WR541,版本从V1到V4,TL-WR541+,版本V1。(TL-WR541 V1版本可能是因为硬件原因而不支持特殊拨号模式和主机伪装功能)

破解封杀ADSL路由器解决办法全剖析(4)

破解方法三:共享卫士

共享卫士是树丫工作室研发的新一代共享上网软件,设计简单、安全、易用。软件采用最新网络安全防护技术,提供给用户一种全新的共享上网接入方式,“ 让您充分享受上网冲浪带来的非凡乐趣”。下载地址:http://www.shuyanet.com/download.php

在由共享卫士搭建成的局域网环境内,安装在服务器上的软件会修改各接入主机的Windows底层及IP数据报文做伪装处理,保护用户共享上网安全, 确保用户网络应用不受限制或干扰。本软件支持Windows 2000/Windows XP/Windows 2003等操作系统平台上的ADSL拨号或固定IP接入共享应用,支持单网卡或多网卡共享接入方式。

共享卫士软件无广告,无插件,提供完全免费下载和使用,用户可在本网站或到指定网站下载并享受及时的软件更新服务。

其他方法:

此外,还可以考虑多路由伪装主机(测试成功)。猫现在也带路由功能,于是可以配合本来的路由,开两个路由,使数据两次打包,伪装为一台主机。

另外还有匿名代理突破共享限制(未测试)。即一台主机做代理,使用匿名代理软件,这样信风软件就无法探测到数据包了,我们可以用多台上网了。

最后一种方法不知道算不算破解:你找多些笔记本电脑放到你家里,布好线,之后给网通打电话(语气要硬一些,别让看出破绽),说就是一家人在上,我家 有钱电脑多你管不着,让他上门来看,正常来说他看到后会把你的帐号放到白名单里面,你就可以共享上网了,以下的就不用我说了吧,知道该怎么做了吧。这招不 知道有没有效,个人认为成功机率70%以上。试好了,给个反馈信息!

2009年2月8日星期日

http://mediaplayer.yahoo.com/

可以插入网页的播放器,非常好的播放效果。