swank-cdt connection refused
My swank-cdt respond connection refused.After some hours debug, I writed a small application in java.Found that the debugger try to use ipv6 address. After add my hostname after 127.0.0.1, This problems resolved.
My swank-cdt respond connection refused.After some hours debug, I writed a small application in java.Found that the debugger try to use ipv6 address. After add my hostname after 127.0.0.1, This problems resolved.
今年以来,网络上传闻中国要对境外网站实行白名单制度。如果真到了那一天我们应该怎样使用互联网呢。也许应该研究MESH网络和大气中的激光通信技术了。网民们可以自己动手学学在非洲农村组建网络的技术。MESH网络必须要参加的节点达到一定的数量才能起作用。激光通信比无线MESH实现的难度高一点。
十年前,我在HF公路的工地上,住在HF的一栋破房子里。每天工地上的活干完了之后就在这里休息,学习学习计算机,工地比较偏僻,周围黑灯瞎火也无处可去。我不喜欢工地,从学校毕业后在工地上呆了没有多久我就想我不能一辈子干这个。我想要从事我感兴趣的计算机。前一年考过了MCSE,01年还没有下一步的奋斗目标。911那天晚上,我和往常一样上网看看,那时候还是用的56k的猫拨号上网。记得逛到新浪的时候,首页上有一篇新闻的标题写的是一架飞机撞上了世贸中心。当时我都没有点进去看。我想美国私人飞机多就是不好,不知道哪个傻逼撞到世贸中心上了,我看了写文章,又到别的网站上去看了看。过了一会儿回到新浪是看到有另一架飞机也撞上了世贸中心。我感觉有点不对劲儿,没有这么巧的事。把这两篇新闻都点开看了,觉得事态比较严重,我记得我那晚睡得比较晚,一直在新浪上跟踪事态的发展。但是美国离我比较远,没有什么深刻的体会,我记忆最深刻的就是废墟好大。
十年时间过的真快,后来我所在的公司改制,我又考了些计算机的证书,跳槽从事计算机。出国深造,回国成家以及当上父亲。十年中经历了人生的低谷,也有向着目标前进和奋斗的乐趣。也许这是我人生中变化最大的十年。
今夜借911十周年之际,我也顺便回忆了这十年来我的经历。百感交集。
中控的门禁系统有httppush的功能,不过要购买带这种功能的门禁机器,而且要购买httppush的sdk。我们的SC203没有这样的功能,不过既然我已经可以给SC203写程序了,可以自己实现类似的功能。 首先写一个sleep程序,可以睡眠3秒钟,这样可以控制每3秒判断有没有新的刷卡记录,有就上传。
# sleep.S
# this program sleep 3 seconds
# To compile this program type:
# > mipsel-generic-linux-gnu-gcc -nostdlib -march=mips32 -mtune=mips32 -I target/usr/include -o sleep sleep.S
# Tested on zksoftware.com SC203 controller
#include <asm/unistd.h> // ...for system serivices
.comm ts,8,4 #time_spec ts
.text # begin code segment
.globl __start # for gcc/ld linking
.ent __start # for gdb debugging info.
__start:
.set noreorder # disable instruction reordering
.cpload $t9 # PIC ABI crap (function prologue)
.set reorder # re-enable instruction reordering
la $a0,ts # load ts
li $v1,3 #sleep three seconds
sw $v1,0($a0)
sw $zero,4($a0)
move $a1,$zero
li $v0,__NR_nanosleep # specify system nanosleep service
syscall # call the kernel
move $a0,$zero # load return code
li $v0,__NR_exit # call exit(0)
syscall
.end __start # for gdb debugging info.
这个sleep程序有什么用呢?请看请看下面这段代码
#!/bin/sh
DEST=/mnt/mtdblock
old=""
while :;
do
new=`ls -l $DEST/extlog.dat`
if [ "$old" != "$new" ] ; then
old="$new"
ftpput -u nobody -p xxxxx 192.168.1.1 /extlog.dat $DEST/extlog.dat
fi
/mnt/mtdblock/sleep
done
这样就是一个ftppush了,只要extlog.dat文件的大小发生改变就会通过ftp上传整个记录。只要记录到了服务器上,想怎么处理都可以了。
最近装了中控的门禁系统,型号是SC203。这个门禁机用的是MIPS的CPU,有16M内存,系统是嵌入式的Linux,内核版本2.4.20,glibc-2.3.2,使用GCC3.2.3编译。根据GPL他应该提供系统的Source给我们,所有链接到GPL部分的Source。但是这家公司没有提供。网上也看到有老外在索要源代码,不过厂商不理他。
手头上虽然有mips的交叉编译器,可是不是对应这么老的内核和C库的。今天想了一下还是可以给它编写不使用glibc,直接调用系统服务的程序的。先用汇编试验了一下,正好复习一下。
# hello.S
# To compile this program type:
# > mipsel-generic-linux-gnu-gcc -nostdlib -march=mips32 -mtune=mips32 -I target/usr/include -o hello hello.S
# Tested on zksoftware.com SC203 controller
#include <asm/unistd.h>
.rdata # begin read-only data segment
.align 2
hello: .asciz "Hello, world!\n" # a null terminated string
length = . - hello # length = IC - (hello-addr)
.align 4
.text # begin code segment
.globl __start # for gcc/ld linking
.ent __start # for gdb debugging info.
__start:
.set noreorder # disable instruction reordering
.cpload $t9 # PIC ABI crap (function prologue)
.set reorder # re-enable instruction reordering
li $a0,1 # load stdout fd
la $a1,hello # load string address
li $a2,length # load string length
li $v0,__NR_write # specify system write service
syscall # call the kernel (write string)
move $a0,$zero # load return code
li $v0,__NR_exit # call exit(0)
syscall
.end __start # for gdb debugging info.
这个程序打印HelloWorld,看似简单,也花费了不少时间。一开始提示指令错误,原因是默认编译的是mips1的目标码,指定march=mips32后解决,后来又提示"Bus Error",原因是没有加.cpload $t9。关于.cpload的作用可以查看linux-mips.org
如果写个程序自动监视extlog.dat文件,有变化的时候把最新的信息发送到我的服务器,就可以把门禁机和我的系统整合。目前中控提供的SDK主要针对的Windows,不适合我们的开发。
如果要构筑完整的开发环境的话需要参考以下链接,另外还剩中控的main程序和相关的几个库的源代码没有。如果只是要追加一些功能的话,没有也没关系。比如写一个小的webserver放到门禁机上运行。
Linux内核不支持,FreeBSD支持,在pfSense上面测试成功。注意pfSense的generate_policy要配置成unique.
最近升级到了ubuntu 11.04发现原来的关闭LCD的功能不好用了。
手工执行 /etc/acpi/screenblank.sh可以关闭显示,但是按快捷键没有用,修改/usr/share/acpi-support/screenblank使用 logger `xset dpms force off 2>&1`发现了标题中的错误。这个错误应该是无权链接到Xserver,把命令改成下面的样子修好了。
su $user -c "xset dpms force off"
使用TeamViewer也有一年多时间了,一直用它帮助别人解决电脑问题。可能因为我同时打开的目标机器太多了,被Teamviewer认为疑似商用环境,现在每次使用只能几分钟,非常不方便。看了一下官网价格4659元。太贵了。我以前也用过一些远程控制方案,最早用NetMeeting,后来用过VNC之类的,当然远程桌面也用过。QQ的远程控制我是不会用的,因为我的机器没有QQ。这些方案有一个问题,如果对方在内网可能不好用,即使在公网,使用还是不够傻瓜化。远程桌面使用时对方还看不到桌面。曾经用过一段时间TTVNC。但是走别人的服务器总是不放心。昨天想了一个解决方案:用SSH的端口转发解决内网访问的问题,同时SSH提供加密,解决VNC不够安全的问题。使用TightVNC作为控制工具,用VBScript来达到自动化,即使被远程支持的用户不会设置也没有关系。
花了一天时间写了一些代码,做成了比较原始的远程管理工具。
support用户。SSH服务器比较好架设,如果你用的OpenWRT或者pfSense之类的,可以直接在路由器上架设,我是用的我的VPS重新开了一个SSHD的实例,只允许公钥登录。useradd support
创建两对密钥分别给受控端和管理员使用,添加publickey到authorized_keys
no-pty,command="/usr/sbin/nologin",permitopen="127.0.0.1:1",no-agent-forwarding,no-X11-forwarding ssh-rsa XXXpubkey= remote support
no-pty,command="/usr/sbin/nologin",no-agent-forwarding,no-X11-forwarding ssh-rsa XXXpubkey= support admin
编写一些脚本main.vbs
Option Explicit
Randomize
Dim oShell, oFso
Set oShell = CreateObject("WScript.Shell")
Set oFso = CreateObject("Scripting.FileSystemObject")
Dim title
title = "Remote Support ;-)"
Dim curPath
curPath = oFso.GetParentFolderName(WScript.ScriptFullName)
oShell.CurrentDirectory = curPath
Dim tfolder
Const TemporaryFolder = 2
Set tfolder = oFso.GetSpecialFolder(TemporaryFolder)
'Display welcom message
oShell.Run "welcome.vbs", 0,False
Function GetFullPath(fname)
GetFullPath = oFso.BuildPath(curPath, fname)
End Function
Sub ImportRegFile()
ON ERROR RESUME NEXT
'Your .Reg file and path goes here as in the example below
Dim sRegFiles(1)
sRegFiles(0) = "serverkey.reg"
sRegFiles(1) = "vncserver.reg"
Dim file
for each file in sRegFiles
'This line runs Regedit in silent mode
oShell.Run "reg.exe IMPORT " & Chr(34) & GetFullPath(file) & Chr(34), 0, True
Next
End Sub
Sub BackupOldSetting()
oShell.Run "reg.exe COPY HKCU\Software\TightVNC\Server HKCU\SOftware\TightVNC\ServerBK /s /f", 0, True
END Sub
Sub RestoreOldSetting()
oShell.Run "reg.exe COPY HKCU\Software\TightVNC\ServerBK HKCU\SOftware\TightVNC\Server /s /f", 0, True
oShell.Run "reg.exe DELETE HKCU\Software\TightVNC\ServerBK /f", 0, True
END Sub
Sub killVNC()
Const strComputer = "."
Dim objWMIService, colProcessList
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'tvnserver.exe'")
Dim objProcess
For Each objProcess in colProcessList
oShell.Run "pskill.exe /accepteula " & objProcess.ProcessId , 0, True
'objProcess.Terminate
Next
END SUB
'Kill other vnc process
Call killVNC
'Detect old setting
Dim haveOldSetting
On Error Resume Next
oShell.RegRead("HKCU\Software\TightVNC\Server\")
If Err.Number = 0 Then
haveOldSetting = True
ELSE
haveOldSetting = False
Err.Clear
End If
ON ERROR GOTO 0
DIM regimported
regimported = oFso.BuildPath(tFolder, ".regimported")
IF oFso.FileExists(regimported) = False Then
'Backup old setting
Call BackupOldSetting
'Import new setting
Call ImportRegFile
oFso.CreateTextFile regimported, True
END IF
Dim remainTimes, connected
remainTimes = 3
connected = False
Dim regSuccess, regFailure
set regSuccess = CreateObject("VBScript.RegExp")
set regFailure = CreateObject("VBScript.RegExp")
regSuccess.pattern = "Remote port forwarding from \d+ enabled"
regFailure.pattern = "Remote port forwarding from \d+ refused"
Dim port, procPlink, oneline
DO until connected = True OR remainTimes <= 0
port = int(10000 * rnd()) + 30000
'port = 30000
set procPlink = oShell.Exec("supportlink.exe" & " -l support -N -v -R " & port & ":127.0.0.1:5902 -i key.ppk -ssh -batch example.com")
Do Until procPlink.StdErr.AtEndOfStream
oneline = procPlink.StdErr.ReadLine()
IF regSuccess.test(oneline) = True THEN
connected = True
Exit Do
END IF
IF regFailure.test(oneline) = True THEN
procPlink.Terminate
Exit Do
END IF
Loop
remainTimes = remainTimes - 1
LOOP
IF connected = False THEN
'Show Error message
oShell.PopUp "Can not connect to server!" , , title, vbCritical + vbOkOnly
WScript.Quit
END IF
'Call Vncserver and show port number
Dim vncProc
set vncProc = oShell.Exec("tvnserver.exe")
Dim oknul
oknul = oFso.BuildPath(tFolder, ".ok.nul")
'Create flag file
oFso.CreateTextFile oknul, True
'Show Dialog
Dim finishProc
set finishProc = oShell.Exec("cscript.exe finish.vbs " & port)
DO WHILE vncProc.Status = 0
If oFso.FileExists(oknul) = False Then
Exit Do
END IF
WScript.Sleep 300
LOOP
IF oFso.FileExists(oknul) Then
finishProc.Terminate
'oFso.GetFile("ok.nul").Delete
END IF
procPlink.Terminate
vncProc.Terminate
IF haveOldSetting THEN
Call RestoreOldSetting
ELSE
oShell.Run "reg.exe DELETE HKCU\Software\TightVNC\Server /f", 0, True
END IF
oFso.GetFile(regimported).Delete
'kill previouse processes
welcome.vbs
Option Explicit
Dim title
title = "Remote Support ;-)"
Dim oShell, oFso
Set oShell = CreateObject("WScript.Shell")
Set oFso = CreateObject("Scripting.FileSystemObject")
Dim tfolder
Const TemporaryFolder = 2
Set tfolder = oFso.GetSpecialFolder(TemporaryFolder)
Dim count
count = 10
DO While oFso.FileExists(oFso.BuildPath(tfolder,".ok.nul")) = False AND count > 0
oShell.PopUp "Connecting , Please Wait ", 3, title, vbInformation + vbOkOnly
count = count -1
LOOP
finish.vbs
Option Explicit
Dim title
title = "Remote Support ;-)"
Dim oShell, oFso, port
Set oShell = CreateObject("WScript.Shell")
Set oFso = CreateObject("Scripting.FileSystemObject")
port = WScript.Arguments.item(0)
Dim returnCode
returnCode = vbOk
DO While returnCode = vbOk
returnCode = oShell.PopUp ("YOUR NUMBER IS " & port & vbCrLf & "When finished click [Cancel] to exit", 0, title, vbInformation + vbOkCancel)
LOOP
ON ERROR RESUME NEXT
Dim tfolder
Const TemporaryFolder = 2
Set tfolder = oFso.GetSpecialFolder(TemporaryFolder)
oFso.GetFile(oFso.BuildPath(tfolder, ".ok.nul")).Delete
WScript.Quit
运行时会出现提示“在连接服务器”,提示会自动刷新直到连接成功或者失败。成功后出现对话框,把YOUR NUMBER IS后面的数字告诉控制端的用户。控制的用户可以运行plink.exe -N -v -l support -i admin.key -batch -ssh -L 5900:127.0.0.1:port转发本地5900端口到远程服务器上的对应端口(就是刚才的数字)。然后vncviewer.exe localhost::5900就可以连接到远程客户机器。
只有远程的客户端运行的程序要傻瓜化,本地的我可以直接打命令。当然,为了使用方便可以写一段VBS,另外写一个shell脚本,可以在我的UBUNTU机器上用。由于VNC和SSH都是跨平台的方案,这样的远程控制方法可用在多个系统上。当然不用VNC用远程桌面也一样是可行的。
VNC有文件传输功能,如果不想用VNC的文件传输,可以把Cygwin的sshd放到客户机器上运行,使用sftp来传输文件。当然SSHD自己的端口也要转发。
整个的思路灵感来自X2Go,X2Go Server只能在Linux机器上运行。VBScript我不是很熟,上面的代码有很多是从Google搜索到的。
Ubuntu 10.04上安装Google Earth6后,汉字都是小方块,网上有解决方法不过不完美,有的照片不能显示,有的变成英文。在翻阅了以下帖子后发现了完美的解决方法。
Ubuntu下Google Earth 6.0中文乱码、自动退出、画面频闪、Panoramio图片不显示的解决办法(附谷歌地球6.0官方PPA源)
【Ubuntu 11.04】Google Earth 6.0.2 インストール (日本語文字化け対処)
思路是替换Google Earth的libQt*.so.4,使用Google Earth5.2的plugins,PRELOAD libfreeimage3。
安装Google Earth6
下载Google Earth 5.2 从中解压出plugins目录,可以执行GoogleEarthLinux.bin文件,到/tmp下面找到解压的文件,有一个googleearth-data.tar文件里面有plugins
下载Debian Sqeeze的QT包,我下载的是4.6.3-4的,core,gui,network,webkit。解压后替换Google Earth6的四个文件。
安装libfreeimage3
修改googleearth文件
sudo gedit /opt/google/earth/free/googleearth 在最后的 LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./googleearth-bin “$@” 前一行插入: export LD_PRELOAD=/usr/lib/libfreeimage.so.3
上次说的可序列化单例的实现在GlassFish下遇到了问题。跟踪后发现GlassFish的Web层调用EJB的时候用的ORB模块和序列化的动作不一样。 具体原因可以看GLASSFISH-16737。虽然调用了readResolve,但是oldToNew里面的值没有变。所以如果一次拷贝中有两个引用指向同一个对象的时候。 只有一个能正确调用readResolve,其他的错误读取缓存的数据。