Aug 31 2012

找bug的日子。。。

Category: 技术ssmax @ 20:07:43

最近几天很郁闷,给何总搞了台新的resin,但是一直出问题,纠结了2个星期,终于都被我找出来了。。。

给官方提了两个bug

http://bugs.caucho.com/view.php?id=5202
http://bugs.caucho.com/view.php?id=5203

写程序越来越不注意细节了,每个请求都经过这段代码,都没有好好的检查。唉。


Jul 20 2012

Google Chrome 允许使用过期插件

Category: 技术ssmax @ 17:19:05

今天更新了一下chrome,发现旧的flash插件一直弹出提示,说已经过期,但是由于项目需要,必须 10.3 的flash版本来测试,又不想每次都要点运行一次。。。

找了一下,发现加上命令行参数:
–allow-outdated-plugins

就可以允许使用了。

下面是全部命令行参数的列表:
http://peter.sh/experiments/chromium-command-line-switches/

 


Mar 02 2012

高负载的rsyslog设置

Category: 技术ssmax @ 12:49:30

准备做一个较高负载的rsyslog udp接收服务器,今天配置了一下,不知道能不能顶住,先记录下来

</pre>
$PrivDropToGroup nobody
$PrivDropToUser nobody

$EscapeControlCharactersOnReceive off

$OMFileAsyncWriting on
$OMFileFlushOnTXEnd off
$OMFileFlushInterval 30
$OMFileIOBufferSize 64k

$template MyFileFormat,"%timegenerated:::date-rfc3339% %fromhost-ip% %rawmsg%\n"
$template DynFile,"/home/rsyslog/test.%$now%.%$hour%.%$minute%.log"

$Ruleset remote10514
$RulesetParser rsyslog.rfc3164
*.*                       -?DynFile;MyFileFormat
& ~

# UDP Syslog Server:
$ModLoad imudp.so  # provides UDP syslog reception
$InputUDPServerBindRuleset remote10514
$UDPServerRun 10514 # start a UDP syslog server at standard port 514
$UDPServerTimeRequery 1000

&nbsp;

$ModLoad ommysql.so

$template JustSQL,"insert into qn_report_log (create_time, ip, message) values ('%timegenerated:::date-mysql%', '%fromhost-ip%', '%rawmsg%')",SQL

$Ruleset remote10515
$RulesetParser rsyslog.rfc3164
*.*                       : ommysql:dbhost,dbname,dbuser,dbpass;JustSQL
& ~

$InputUDPServerBindRuleset remote10515
$UDPServerRun 10515 # start a UDP syslog server at standard port 514
$UDPServerTimeRequery 1000
<pre>

两种输出,不同负载

DynFile 按分钟输出,负载较高

mysql的输出是另外一个应用,负载较低,如果被影响的话就另外开一个实例来启动

基本rsyslog的基础功能都用了一遍。。。

启动脚本记得关掉dns解释

/home/rsyslog/sbin/rsyslogd -x -4 -f /home/rsyslog/etc/rsyslog.conf -i /home/rsyslog/rsyslogd.pid


Feb 01 2012

vsftpd 虚拟用户设置

Category: 技术ssmax @ 12:17:47

今天迁移一个老服务,用的是windows 上面的serv-U ,自从大学以后都没用过这个东东了,迁移到linux下面的vsftpd

设置了一下虚拟用户,记录一下配置过程

yum install vsftpd

安装好

修改配置文件:/etc/vsftpd/vsftpd.conf


anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
idle_session_timeout=120
data_connection_timeout=60
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES

local_root=/home/ftp/$USER
chroot_local_user=YES
user_sub_token=$USER
virtual_use_local_privs=YES
hide_ids=YES
guest_enable=YES

记得touch 一下 /etc/vsftpd/chroot_list

这个东东在 chroot_local_user=YES 的时候,表示不需要chroot的用户,空文件即可

local_root=/home/ftp/$USER

把虚拟用户限制在自己的目录中,记住建立 ftp目录,并且ftp用户可写,更复杂的逻辑可以通过 user_config_dir 来定义。

local_enable=YES

这里表示使用非匿名用户,默认是用系统用户的,详细逻辑其实是在pam验证里面指定的。

guest_enable=YES
由于我们使用虚拟用户,不是系统里面存在的实际用户,所以这里设置所有访客其实都是使用ftp用户来映射

具体的用户可以通过 guest_username 指定,默认是用户 ftp

userlist_enable=YES
userlist_deny=NO

这两个加起来,表示只有在 /etc/vsftpd/user_list 里面的用户才能登录

/etc/vsftpd/user_list 里面记得加上你自己增加的虚拟用户,或者把userlist_deny设置为YES,都可以,否则在输入用户名后就会断开连接。

虚拟用户登录最重要的就是这里了:

pam_service_name=vsftpd

使用pam服务,默认的是用系统的登录用户,我们先建立虚拟用户的数据库:

echo ‘user1 pass1’ > /etc/vsftpd/passwd

明文密码,空格分隔,一行一个用户,

然后使用以下程序转换成bdb格式:


use DB_File;

my $database = $ARGV[0];
die "Use: create.pl <database>\n" unless ($database);
print "Using database: $database\n";

my %lusers = ();

tie %lusers, 'DB_File', $database, O_RDWR|O_CREAT, 0644, $DB_HASH ;
while (<STDIN>) {
my ($user, $pass) = split;

$lusers{$user} = $pass;
}
untie %lusers;

保存成 create.pl

执行:

cat /etc/vsftpd/passwd | perl  /etc/vsftpd/create.pl /etc/vsftpd/passwd.db

就可以转换成bdb格式的文件了。

生成了用户数据文件以后,修改/etc/pam.d/vsftpd

原来的验证方式就是使用系统的用户名密码,把原来的记录注释掉

加上两行:


auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/passwd

这里要注意两点,第一个是全路径,如果是64位的系统就用/lib64 ,32的就是 /lib

第二个指定的db文件不需要带后缀,会自动加上的。

都修改好以后就可以

/etc/init.d/vsftpd start

启动服务,测试一下,是不是都正常了。


Jan 19 2012

mysql java驱动 访问latin1编码数据时候乱码的问题

Category: 技术ssmax @ 14:23:10

由于以前偷懒的原因,很多数据库都是使用latin1作为字符编码,这样可以原样保留数据的字节流,但是最近发现新版的mysql驱动,包括345各版本的最新驱动,用characterEncoding=latin1 参数去访问数据,都会出现问号乱码的问题。

在网上查了一下,有人说是驱动里面自带强制转换,所以出了问题,根据提示看了一下代码,果然在

ResultSetRow在getString的时候,会使用 SingleByteCharsetConverter 来强制转码,发生了问题。

网上说要修改驱动,我自己尝试了一下,既然强制转码里面选择了使用cp1252,那这个字符集应该也是单字符全集,所以我直接尝试用该字符集来连接,问题就解决了。。。。

有两种解决方案:

1. 使用ResultSet中的getBytes方法,直接获取原始bytes数组,自己按照录入时候的编码new String即可。

2. 如果用了框架结构,写了必须获取String的,那么连接参数可以写

characterEncoding=cp1252

程序使用的时候

rs.getString(1).getBytes(“cp1252”)

即可获取原始字节数组,然后也是按照录入编码进行 new String 即可。

注意这种方法可能会引起问题,由于cp1252对一些字节的处理并不是我们理解的那样,比如

MySQL translates 0x81 to Unicode 0x0081, 0x8d to 0x008d, 0x8f to 0x008f, 0x90 to 0x0090, and 0x9d to 0x009d.

如果汉字里面刚好有着3中字节的,就会出问题,显示问号。。。

研究了一下,发了一个bug帖,http://bugs.mysql.com/bug.php?id=64071

估计也是没人理会的了,呵呵,就当练练英文。


Jan 18 2012

允许scp传输文件,但不允许ssh登录

Category: 技术ssmax @ 20:10:30

以前在上海做过一次,那次是只允许sftp,但是不允许登录,我记得是用新版openssh的chroot来做的,今天也碰到同样情况,这次是允许scp,不允许登录,查了一下baidu,找到一个非常淫荡的方法,分享一下:

更改用户目录下面的.profile 文件(bash就改 .bash_profile)

第一行插入 exit

用户登录以后就自动执行该脚本并退出。。。一般用用就够了,哈哈。果然非常淫荡啊!


Dec 30 2011

转载:穷举PIN码——是Wi-Fi保护技术WPS的软肋吗?(修3)

Category: 技术ssmax @ 14:30:33

泰国归来,继续投入网络战争中。。。

原文地址: http://blog.ibeini.com/archives/513.html

 

什么是PIN码?
印在无线路由器设备标签上的一组8位数字字符串,无线路由器管理界面中当然也会存在并可更改。

PIN码有什么用?
在无线网卡的配套管理软件(如TP-LINK的QSS软件)里输入无线路由器设备上的那8位数字字符串就可以成功登录该已被加密的无线路由器。

穷举PIN码是什么意思?
既然知道了无线路由器PIN值的范围(8位纯数字),且目前大部分设备的WPS是呈开启状态的,那么穷举PIN码以攻破无线路由器的安全防护这一暴力行为就有了*理论*可行性,但实际上效果如何呢……

图1 PIN码

图2 TP-LINK的QSS软件

更多关于WPS和PIN的知识请Google,以上仅做简单介绍。

就在8个小时之前,@devttyS0公布了他的开源免费软件Reaver,这是一个可以穷举PIN码的程序,并声称还有一个商业版本。

图3 Google Code上的Reaver代码

地址:http://code.google.com/p/reaver-wps

使用的方法貌似很简单:

# reaver -i mon0 -b 00:01:02:03:04:05

mon0是进入监听模式下的网卡名称,后边则是目标AP的MAC地址。

图4 Reaver程序的介绍:

原文地址:
http://www.tacnetsol.com/products

Reaver程序的作者@devttyS0写的一篇博文:10小时内搞定WPA加密……好像还流露出有点儿无奈:

图5 《Cracking WPA in 10 Hours or Less》

原文地址:
http://www.devttys0.com/2011/12/cracking-wpa-in-10-hours-or-less

在这篇博文中提到了一个人的名字:Stefan,一个澳大利亚人,他在2011年12月27日写了一篇关于暴力破解PIN码的文章:

图6 《Wi-Fi Protected Setup PIN brute force vulnerability》

原文地址:
http://sviehb.wordpress.com/2011/12/27/wi-fi-protected-setup-pin-brute-force-vulnerability

图7 文中提到的《Brute forcing Wi-Fi Protected Setup》文档

该PDF文档下载地址:
http://sviehb.files.wordpress.com/2011/12/viehboeck_wps.pdf

结果此文一发,各路英雄就都出来,有兴趣的朋友可以去看看评论,但在这里,我只给大家看一条:Keith Reynolds的评论。

图8 Keith Reynolds的不同声音

我的个人观点:
我曾经做过的一个测试,在3K/sec的计算机上穷举8位全数字的WPA密码需要8个小时才能完成。如果PIN码是随机的8位,考虑信号不佳,噪声过大,设备负载过重,还有那恐怖的等待PIN认证结果的合理延迟(如果PIN码验证失败,程序会等待很长一段时间才会提示,这里特指QSS软件,Reaver还未测试)等等因素……10小时内搞定WPA加密我觉得不大现实,除非——某设备厂商的PIN码会固定在一个范围内且被人所知。也许说到这里会有反对我的人站出来,说:10小时搞不定,我可以100小时搞定!好吧,自己去跑跑看吧。或许一个对你有重大意义的AP值得你去这样做,况且比穷举WPA密码来说现实得多(至少8位的字符串),只能祝你好运了。作为用户,安全起见,还是把WPS功能关闭吧……

Reaver程序我还未做测试,以上只是我现有知识所述的一面之词,抛砖引玉,欢迎批评指教,谢谢!

修1:
刚才看了一下《Brute forcing Wi-Fi Protected Setup》,发现穷举PIN这一暴力行为现在具有了可行性,参看图9:

图9

由于8位纯数字的穷举量为:10的8次方,即:100.000.000,这是一个很庞大的数字,穷举会耗费很长时间。现在,PIN信息可以分为两组来看,1st和2st,分别发送M4和M6信息,以验证1st和2st是否正确,这样,穷举量变成:10的四次方+10的四次方,即:20.000,不仅仅是这样,PIN的8位数字是最后一位是校验值,那么穷举量最终变成了:10的四次方+10的三次方,即:11.000……

修2:
目前Reaver程序已经成功编译并已在测试当中,见下图10,准备开一晚上计算机,看看能否找到我AP的PIN码……
图10

修3
昨天跑了一晚上PIN码,因网卡意外停止工作未果。
今天有两个重要新闻:
1:@devttyS0更新了Reaver,版本号为:1.1:
http://code.google.com/p/reaver-wps/downloads/list
图11

2:Stefan(@sviehb)发布了他用Python写的wpscrack,声称比Reaver要快一些,但有些兼容性问题:
http://dl.dropbox.com/u/22108808/wpscrack.zip
图12

09.00 2011-12-30——修3
22.46 2011-12-29——修2
16:20 2011-12-29——修1
14:24 2011-12-29


Oct 10 2011

发现一个有潜力的dns

Category: 技术ssmax @ 15:45:53

今天在hostloc发现一个不错的dns解释服务器
地址比较牛
114.114.114.114 / 114.114.115.115

114电话人工查号,嘿嘿
是不是有点像google的味道,哈哈
8.8.8.8 / 8.8.4.4

官网:http://www.114dns.com

不过最怕国内的域名挟持啊,先观望一下,哈哈。


Sep 19 2011

手动创建 /dev/null 和 /dev/zero

Category: 技术ssmax @ 17:28:09

某些vps会屏蔽了/dev/null 和/dev/zero 两个很有用的设备,我们可以通过mknod的方法手动创建它们

linux的创建方法如下:

mknod /dev/zero c 1 5

mknod /dev/null c 1 3

unix下面的有点区别,主要追对不一样的系统

mknod [OPTION]… NAME TYPE [MAJOR MINOR]

后面两个数字会有一些 区别,具体含义等以后再查下文档才清楚,呵呵。

 

linux 的major.h

 

#define UNNAMED_MAJOR           0
#define MEM_MAJOR               1
#define RAMDISK_MAJOR           1
#define FLOPPY_MAJOR            2
#define PTY_MASTER_MAJOR        2
#define IDE0_MAJOR              3
.............

The best overview of all the major and minor numbers is in the /usr/src/linux/Documentation directory. The devices.txt is considered the “authoritative” source for this information.

具体的含义就要去上面翻阅了,一般发行版都没有安装文档,最好自己yum或者apt一下,呵呵。


Sep 19 2011

How do I debug a failed device install or disable?

Category: 技术ssmax @ 13:33:03

记录一下,回家要检查一下那个direct input 手柄不能用的问题,很诡异,别的机器可以,就一台不行,还有显示器的前置usb hub也突然不行了,诡异啊诡异。

 

When debugging a failed device install, one of the first things you should do is look at the %windir%\setup*.log files (yes files, there are a few of them and the names changed in Vista).  But what if the logs do not have enough information for you to figure out what went wrong?  Well, SetupAPI lets you control the level of logging.  This MSDN article explains what registry value to edit and what the different flags do.

If you don’t like reading the docs or changing registry values, OSR line has a GUI tool which you can download which makes setting these values painless.

As with any control being cranked up to its highest setting, you will get a lot of information, so be prepared to parse through some noise to get to the data you really want.

Debugging a failed device install or disable can be tough.  The error could be hidden in the depths of the system and it might take awhile to figure it out.  The error code on the device might be of some help, but it is not always clear.  For instance, you might get a code 10 for a failed start which means that the driver failed the pnp start irp…but that doesn’t tell you why thedriver failed the request in the first place.  The error text in the add new/upgrade hardware wizard is pretty vague as well.

So what’s a developer to do?  Where do you start?  Well, you should check the setup logs.  These logs exist on all versions of windows, starting with Windows 2000:

  • %windir%\setupapi.log
  • %windir%\setupact.log
  • %windir%\setuperr.log

In Windows Vista, there are 2 additional log files

  • %windir%\inf\setupapi.app.log
  • %windir%\inf\setupapi.dev.log

Finally, if you are installing a KMDF driver, the KMDF coinstaller writes out errors to setupact.log.  There are also KMDF logs (depending on the version you installed):

  • %windir%\wdf01000inst.log
  • %windir%\wdf01001inst.log
  • %windir%\wdf01005inst.log

If these logs do not have information in them, turn on verbose setup logging (I wrote about how to do this previously) and retry the installation.  If the log files still do not indicate what is wrong, you have to use the error codes to start digging around…


« Previous PageNext Page »