SSH over Tor On Ubuntu 8.10

我经常需要使用ssh登录linux主机,今天突然想到如何用在ubuntu linux上在tor网路上使用ssh?查了些资料,使用如下命令即可:

sudo apt-get install connect-proxy
ssh -2 -l SSH_LOGIN_NAME  `tor-resolve SSH_SERVER_NAME.com localhost:9050` -o ProxyCommand="connect -4 -S localhost:9050 %h %p"

命令解释如下:

-2:仅尝试使用V2版的协议
-l:登录
tor-resolve SSH_SERVER_NAME.com localhost:9050,使用tor网络解析网络地址,防止欺骗
-o ProxyCommand=”connect -4 -S localhost:9050 %h %p”,连接代理。

我日常使用管理主机可以只用:ssh -2 -l USERNAME:SSH_SERVER ` -o ProxyCommand=”connect -4 -S localhost:9050 %h %p”即可,就不用进行tor网络的域名解析了。加快了速度。

但说实在的,tor网络用ssh速度确实不够理想~~

再谈WinIO初始化异常

前段时间WinIO在我的新项目中总是初始化失败,有时候又是好好的,很让人费解。修改了源代码显示了很多调试信息后,也没有什么太多的收获。由于我们的工控卡必须要用这个库,所以没办法,只得停下脚步,细细研究一下问题所在。

初始化的时候调用的是InitializeWinIo()函数:

bool _stdcall InitializeWinIo()
{
bool bResult;
DWORD dwBytesReturned;`

IsNT = IsWinNT();

if (IsNT)
{
hDriver = CreateFile("\\.\WINIO",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

// If the driver is not running, install it

if (hDriver == INVALID_HANDLE_VALUE)
{
GetDriverPath();

bResult = InstallWinIoDriver(szWinIoDriverPath, true);

if (!bResult)
return false;

bResult = StartWinIoDriver();

if (!bResult)
return false;

hDriver = CreateFile("\\.\WINIO",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

if (hDriver == INVALID_HANDLE_VALUE)
return false;
}

// Enable I/O port access for this process

if (!DeviceIoControl(hDriver, IOCTL_WINIO_ENABLEDIRECTIO, NULL,
0, NULL, 0, &dwBytesReturned, NULL))
return false;

}
else
{
VxDCall = (DWORD (WINAPI *)(DWORD,DWORD,DWORD))GetK32ProcAddress(1);

hDriver = CreateFile("\\.\WINIO.VXD", 0, 0, 0, CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE, 0);

if (hDriver == INVALID_HANDLE_VALUE)
return false;
}

IsWinIoInitialized = true;

return true;
}

函数首先查看是不是NT系统,如果是,就创建设备驱动的handle,如果没有的话,就安装一个。有的话就直接使用。

仔细看看这个函数值后就知道其实引起初始化失败的原因很多。我遇到的问题就是有时候异常退出了,第二次就无法正常启动WinIO了,只能按照这样的方式来进行:

InitWinIO->成功->程序异常退出->InitWinIO->失败->ShutdownWinIO->InitWinIO->成功

也就是说重新启动两次程序才行。由于异常退出保留在内存的驱动第二次InitWinIO会失败,然后ShutdownWinIO就会卸载这个驱动,再进行InitWinIO就正确了。

那么直接在应用程序启动前无论怎么就运行ShutdownWinIO先关闭一下可以么?看看代码似乎是可以的:

void _stdcall ShutdownWinIo()
{
DWORD dwBytesReturned;`

if (IsNT)
{
if (hDriver != INVALID_HANDLE_VALUE)
{
// Disable I/O port access

DeviceIoControl(hDriver, IOCTL_WINIO_DISABLEDIRECTIO, NULL,
0, NULL, 0, &dwBytesReturned, NULL);

CloseHandle(hDriver);

}

RemoveWinIoDriver();
}
else
CloseHandle(hDriver);

IsWinIoInitialized = false;
}

我测试过,直接在程序一开始就执行ShutdownWinIo()然后在初始化WinIO,一样可能提示出错。什么原因呢?

其实,WinIO的ShutdownWinIo这里有一个bug:

if(IsNT)

如果你没有调用过InitializeWinIo()的话,全局变量IsNT是为false的,他就没有正确的执行nt平台的代码。这就解释了为什么没有关闭成功。

所以,找到了问题所在,有两种解决方法:

  • 将IsNT替换为IsWinNT()的函数调用
  • 在InitWinIO里面if(IsNT)以后,执行一次ShutdownWinIO即可。

这样,我所遇到的初始化失败问题终于得到了解决:)

纯手工打造铜杯

几个月以前好又多打折的时候买了个哈尔斯的保温壶,可能打折的商品就是有些问题处理的商品,好像保温指标也没有达到要求。以前买的哈尔斯的保温壶里面都有一个小的白色盖子的,不知道什么原因,这个里面没有,用了一段时间总是对壶盖的塑料味道感到不爽,老爸就自己做了一个铜杯,钣金活,很靓,很帅:)

做的时候当然不是先就在铜板上直接开始,先用烟盒纸做好尺寸大小,然后在在铜皮上剪。前面的制作过程没有拍图,不好意思啦~~感觉不开闪光灯照的效果还挺好的,白炽灯的暖色调。

制作中:

成品:

以前做的水壶嘴,很好用,很强大~~

三星19寸液晶显示器拆解

大三的时候买的液晶显示器,三星的,19寸普屏,当时买成3000多啊。可没买多久就满屏的坏点,屏幕也不知道怎么回事被戳了一个小窟窿。后来还是到客服去坏了一个屏,没要钱。最郁闷的是最近两年下面的按钮出了问题了,按键对应有问题,总是一按就出现自动调整界面,郁闷的很。

拆了吧,拆开看看里面怎么回事,是不是按钮被水打湿了短路了怎么的。

图:把底座拆了,线取了,拿出螺丝刀,动手~~

几个螺丝按照提示松开就可以了。然后就是使劲敲开外壳。外壳是扣具扣上去的,很紧。一不小心就弄坏了,可能和我拆的方式有一定关系。
图:扣件

图:好的扣件

图:坏了的扣件,已经断了。

最终拆开就这样了:

按钮和排线:

按钮和电路板

郁闷的是电路板被塑料档片烫死了,如果硬要拆下来的话可能会把塑料弄断,算了,还是收工吧~~~

导入博客,累死了~

晚上把以前CSDN的博客文章上有意义的部分全部转过来了,这年头CSDN的博客弄得乱七八遭的,不知道是谁开发的。CNBLOGS上面的日志我也有想法导过来,结果把我害了。

CNBLOGS博客上面有一个导出功能,然后会把文章评论等等全部保存为一个类似于RSS的文件。然后在Wordpress里面选择导入RSS,上传一个文件,就导入了,连选择导入的文章的功能都没有,这点Wordpress让我很失望。开始我还兴高采烈的看着N多导入成功,后来一看文章才傻眼了。摘要显示全不正确,文章内容可可视化编辑器看不到,用HTML看了看代码,发现了[[CDATA字样,而且内容不全……彻底郁闷了,那么多文章,之好一个一个找出来,看看那篇是导入的。

幸好CNBLOGS的文章的时间段还比较清楚,而且不能显示的部分网页会变形。然后用后台的批量一个一个删除……太慢了。后来要到事情结尾的时候才想起,所有的导入的分类目录都是“杂项”(其实就是默认的“未分类”)。好,把所有杂项提取出来,就大大减少了范围了。怎么刚开始没有想起呢?~

所以,有朋友要玩导入功能之前,最好请把“未分类”这个分类下面的文章全部定义好其他的类别,然后导入。即便导入失败问题也不大,找出所有这个分类就好了,比一个一个的捉迷藏的找快了很多~~~

准备睡觉了,太累了~~目前还有2005年8月到2006年8月的文章还是空的,有空把所有CNBLOGS上面的文章也搬过来,整个博客的文章基本就齐全了:)