paulwong

#

安装MONGODB在CENTOS、UBUNTU

CENTOS
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/


UBUNTU
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

posted @ 2013-11-08 12:01 paulwong 阅读(275) | 评论 (0)编辑 收藏

Flume日志收集

     摘要: 一、Flume介绍Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。设计目标:(1) 可靠性当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to-end(收到数据agent首先将event写到...  阅读全文

posted @ 2013-10-31 18:20 paulwong 阅读(51008) | 评论 (1)编辑 收藏

MONGODB GUI客户端

WINDOWS+MAC+LINUX版的都有
http://robomongo.org/

posted @ 2013-10-27 11:29 paulwong 阅读(484) | 评论 (0)编辑 收藏

我是如何反编译D-Link路由器固件程序并发现它的后门的

OK,又是周末晚上,没有约会,只有一大瓶Shasta汽水和全是快节奏的音乐…那就研究一下程序吧

一时兴起,我下载了D-link无线路由器(型号:DIR-100 revA)的固件程序 v1.13。使用工具Binwalk,很快的就从中发现并提取出一个只读SquashFS文件系统,没用多大功夫我就将这个固件程序的web server(/bin/webs)加载到了IDA中:

Strings inside /bin/webs

/bin/webs中的字符信息

基于上面的字符信息可以看出,这个/bin/webs二进制程序是一个修改版的thttpd,提供路由器管理员界面操作功能。看起来是经过了台湾明泰科技(D-Link的一个子公司)的修改。他们甚至很有心计的将他们很多自定义的函数名都辅以“alpha”前缀:

Alphanetworks' custom functions

明泰科技的自定义函数

这个alpha_auth_check函数看起来很有意思!

这个函数被很多地方调用,最明显的一个是来自alpha_httpd_parse_request函数:

Function call to alpha_auth_check

调用alpha_auth_check函数

我们可以看到alpha_auth_check函数接收一个参数(是存放在寄存器$s2里);如果alpha_auth_check返回-1(0xFFFFFFFF),程序将会跳到alpha_httpd_parse_request的结尾处,否则,它将继续处理请求。

寄存器$s2在被alpha_auth_check函数使用前的一些操作代码显示,它是一个指向一个数据结构体的指针,里面有一个char*指针,会指向从HTTP请求里接收到的各种数据;比如HTTP头信息和请求地址URL:

$s2 is a pointer to a data structure

$s2是一个指向一个数据结构体的指针

我们现在可以模拟出alpha_auth_check函数和数据结构体的大概样子:

struct http_request_t {     char unknown[0xB8];     char *url; // At offset 0xB8 into the data structure };  int alpha_auth_check(struct http_request_t *request);

alpha_auth_check本身是一个非常简单的函数。它会针对http_request_t结构体里的一些指针进行字符串strcmp比较操作,然后调用check_login函数,实际上就是身份验证检查。如果一旦有字符串比较成功或check_login成功,它会返回1;否者,它会重定向浏览器到登录页,返回-1;

alpha_auth_check code snippet

alpha_auth_check函数代码片段

这些字符串比较过程看起来非常有趣。它们提取请求的URL地址(在http_request_t数据结构体的偏移量0xB8处),检查它们是否含有字符串“graphic/” 或 “public/”。这些都是位于路由器的Web目录下的公开子目录,如果请求地址包含这样的字符串,这些请求就可以不经身份认证就能执行。

然而,这最后一个strcmp却是相当的吸引眼球:

An interesting string comparison in alpha_auth_check

alpha_auth_check函数中一个非常有趣的字符串比较

这个操作是将http_request_t结构体中偏移量0xD0的字符串指针和字符串“xmlset_roodkcableoj28840ybtide”比较,如果字符匹配,就会跳过check_login函数,alpha_auth_check操作返回1(认证通过)。

我在谷歌上搜索了一下“xmlset_roodkcableoj28840ybtide”字符串,只发现在一个俄罗斯论坛里提到过它,说这是一个在/bin/webs里一个“非常有趣”的一行。我非常同意。

那么,这个神秘的字符串究竟是和什么东西进行比较?如果回顾一下调用路径,我们会发现http_request_t结构体被传进了好几个函数:

call_graph

事实证明,http_request_t结构体中处在偏移量 0xD0处的指针是由httpd_parse_request函数赋值的:

Checks for the User-Agent HTTP header

检查HTTP头信息中的User-Agent值

Populates http_request_t + 0xD0 with a pointer to the User-Agent header string

将http_request_t + 0xD0指针指向头信息User-Agent字符串

这代码实际上就是:

if(strstr(header, "User-Agent:") != NULL) {     http_request_t->0xD0 = header + strlen("User-Agent:") + strspn(header, " \t"); }

知道了http_request_t偏移量0xD0处的指针指向User-Agent头信息,我们可以推测出alpha_auth_check函数的结构:

#define AUTH_OK 1 #define AUTH_FAIL -1  int alpha_auth_check(struct http_request_t *request) {     if(strstr(request->url, "graphic/") ||        strstr(request->url, "public/") ||        strcmp(request->user_agent, "xmlset_roodkcableoj28840ybtide") == 0)     {         return AUTH_OK;     }     else     {         // These arguments are probably user/pass or session info         if(check_login(request->0xC, request->0xE0) != 0)         {             return AUTH_OK;         }     }      return AUTH_FAIL; }

换句话说,如果浏览器的User-Agent值是 “xmlset_roodkcableoj28840ybtide”(不带引号),你就可以不经任何认证而能访问web控制界面,能够查看/修改路由器的 设置(下面是D-Link路由器(DI-524UP)的截图,我没有 DIR-100型号的,但DI-524UP型号使用的是相同的固件):

Accessing the admin page of a DI-524UP

访问型号DI-524UP路由器的主界面

基于HTML页上的源代码信息和Shodan搜索结果,差不多可以得出这样的结论:下面的这些型号的D-Link路由器将会受到影响:

  • DIR-100
  • DI-524
  • DI-524UP
  • DI-604S
  • DI-604UP
  • DI-604+
  • TM-G5240

除此之外,几款Planex路由器显然也是用的同样的固件程序:

  • BRL-04UR
  • BRL-04CW

你很酷呀,D-Link。

脚注:万 能的网友指出,字符串“xmlset_roodkcableoj28840ybtide”是一个倒序文,反过来读就是 “editby04882joelbackdoor_teslmx”——edit by 04882joel backdoor _teslmx,这个后门的作者真是位天才!

posted @ 2013-10-26 09:33 paulwong 阅读(251) | 评论 (0)编辑 收藏

【转载】经典漫画讲解HDFS原理

分布式文件系统比较出名的有HDFS  和 GFS,其中HDFS比较简单一点。本文是一篇描述非常简洁易懂的漫画形式讲解HDFS的原理。比一般PPT要通俗易懂很多。不难得的学习资料。


1、三个部分: 客户端、nameserver(可理解为主控和文件索引,类似linux的inode)、datanode(存放实际数据)

在这里,client的形式我所了解的有两种,通过hadoop提供的api所编写的程序可以和hdfs进行交互,另外一种就是安装了hadoop的datanode其也可以通过命令行与hdfs系统进行交互,如在datanode上上传则使用如下命令行:bin/hadoop fs -put example1 user/chunk/


2、如何写数据过程





3、读取数据过程



4、容错:第一部分:故障类型及其检测方法(nodeserver 故障,和网络故障,和脏数据问题)




5、容错第二部分:读写容错



6、容错第三部分:dataNode 失效



7、备份规则



8、结束语

posted @ 2013-10-26 09:15 paulwong 阅读(626) | 评论 (0)编辑 收藏

OAUTH 2.0资源

http://wenku.baidu.com/view/0c80c91bb7360b4c2e3f647c.html


OAuth 2.0 Tutorial
http://tutorials.jenkov.com/oauth2/index.html


New JavaScript SDK & OAuth 2.0 based FBConnect Tutorial
http://thinkdiff.net/facebook/new-javascript-sdk-oauth-2-0-based-fbconnect-tutorial/


Twitter OAuth
http://robfig.github.io/revel/samples/twitter-oauth.html










posted @ 2013-10-24 11:27 paulwong 阅读(482) | 评论 (0)编辑 收藏

vi 常用命令行

1.vi 模式
  a) 一般模式: vi 处理文件时,一进入该文件,就是一般模式了.
  b) 编辑模式:在一般模式下可以进行删除,复制,粘贴等操作,却无法进行编辑操作。等按下‘i,I,o,O,a,A,r,R’等
字母之后才能进入编辑模式.通常在linux中,按下上述字母时,左下方会出现'INSERT'或者‘REPLACE’字样,才可以
输入任何文字到文件中.要回到一般模式,按下[ESC]键即可.
  c) 命令行模式:在一般模式中,输入“: 或者/或者?”,即可将光标移动到最下面一行,在该模式下,您可以搜索数据,而且读取,
   存盘,大量删除字符,离开vi,显示行号等操作.

2.vi 常用命令汇总:

2.1 一般模式
  a) 移动光标:
  --> 上下左右方向键 ↑↓← →
  --> 翻页 pagedown / pageup 按键
  --> 数字 0 : 将光标移动到当前行首
   --> $ :   将光标移动到当前行尾
   --> G : 移动到这个文件的最后一行 nG : n 为数字,移动到这个文件的第n行.
  --> gg: 移动到这个文件的第一行 相当于 1G

  b) 搜索与替换
  --> /word : 从光标开始,向下查询一个名为word的字符串。
  --> :n1、n2s/word1/word2/g : n1 与n2 为数字.在第n1与n2行之间寻找word1这个字符串,
  并将该字符串替换为word2。
   --> :1、$s/word1/word2/g : 从第一行到最后一行寻找word1字符串,并将该字符串替换为word2
  --> :1、$s/word1/word2/gc: 从第一行到最后一行寻找word1字符串,并将该字符串替换为word2。
  并且在替换之前显示提示符给用户确认(conform)是否需要替换。
   c) 删除,复制,粘贴
   --> x,X : 在一行中,x为向后删除一个字符(相当于del键),X为向前删除一个字符(相当于backspace键)。
  --> dd : 删除光标所在的那一整行。
  --> ndd : n 为数字。从光标开始,删除向下n列。
   --> yy : 复制光标所在的那一行。
   --> nyy : n为数字。复制光标所在的向下n行。
   --> p,P : p 为将已复制的数据粘贴到光标的下一行,P则为贴在光标的上一行。
  --> u : 复原前一个操作
   --> CTRL + r : 重做上一个操作。
  --> 小数点'.': 重复前一个动作。

2.2 编辑模式:
  a) i, I : 在光标所在处插入输入文字,已存在的文字向后退。i 为‘从当前光标所在处插入’,I 为‘在当前所在行的一个非空格符处开始插入’。
   b) a, A : a 为‘从当前光标所在处的下一个字符开始插入’。A 为‘从光标所在行的最后一个字符处开始插入’。
  c) o,O : 这是英文o的大小写。o为‘在当前光标所在行的下一行处插入新的一行’。O表示‘在当前光标所在行的上一行插入新的一行’。
  d) r,R : 替换:r 会替换光标所在的那一个字符。 R : 会一直替换光标所在的字符,直到按下esc 键为止。
  e) ESC : 进入一般模式。

2.3 命令模式:
  a) :w : 将编辑的数据写入硬盘
   b) :q : 离开vi
   c) :q! : 强制离开,不存储
  d) :wq : 存储后离开
  e) :wq! : 强制存储后离开

3. vim 附加命令行
3.1 块选择(visual block)
  v 字符选择,将光标经过的地方反白显示
  V 行选择,会将光标经过的行反白选择
  ctrl + v 块选择,可以用长方形的方式选择数据
  y 复制反白的地方
  d 将反白的地方删除掉

3.2 多文件编辑
  :n 编辑下一个文件
    :N 编辑上一个文件
  :files 列出当前vim 打开的所有文件

3.3 多窗口功能
:sp 【filename】打开一个新窗口,如果加filename,表示在新窗口打开一个新文件
   否则表示两个窗口为同一个文件内容
ctrl+wj 先按下ctrl ,再按下w后,放开所有按键,然后按下j,则光标可移动到下方的窗口
ctrl+wk 同上,不过光标移动到上面的窗口
ctrl+wq 其实就是:q结束离开。

posted @ 2013-10-19 20:05 paulwong 阅读(267) | 评论 (0)编辑 收藏

一些数据切分、缓存、rpc框架、nosql方案资料

1、数据切分

        1.1、mysql中间件研究(Atlas,cobar,TDDL) 

        1.2、利用 MySQL Proxy 实现数据切分及整合 

        1.3、基于MySQL分库分表方案简介 

        1.4、tddl和diamond  

2、缓存

        2.1、java客户端三种方式操作 

        2.2、myibatis配置memcached评测 

        2.3、Memcached + Spring Caching 

        2.4、memcachedb-持久化存储的缓存系统 

        2.5、memcachedb让memcache的数据持久化 

        2.6、淘宝kv缓存框架tair 

        2.7、ibatis之扩展缓存ibatis-tair-cache 

3、rpc框架

        3.1、dubbo 

        3.2、hsf 未开源

        3.3、服务框架HSF分析之一容器启动

4、noSql

        4.1、学习NoSQL数据库的必读资料 

posted @ 2013-10-14 10:14 paulwong 阅读(2479) | 评论 (0)编辑 收藏

启用TOMCAT的SSL

本教程使用 JDK 6 和 Tomcat 7,其他版本类似。

基本步骤:

使用 java 创建一个 keystore 文件
配置 Tomcat 以使用该 keystore 文件
测试
配置应用以便使用 SSL ,例如 https://localhost:8443/yourApp
1. 创建 keystore 文件

执行 keytool -genkey -alias tomcat -keyalg RSA 结果如下
loiane:bin loiane$ keytool -genkey -alias tomcat -keyalg RSA
Enter keystore password:  password
Re-enter new password: password
What is your first and last name?
  [Unknown]:  Loiane Groner
What is the name of your organizational unit?
  [Unknown]:  home
What is the name of your organization?
  [Unknown]:  home
What is the name of your City or Locality?
  [Unknown]:  Sao Paulo
What is the name of your State or Province?
  [Unknown]:  SP
What is the two-letter country code for this unit?
  [Unknown]:  BR
Is CN=Loiane Groner, OU=home, O=home, L=Sao Paulo, ST=SP, C=BR correct?
  [no]:  y
 
Enter key password for
    (RETURN if same as keystore password):  password
Re-enter new password: password


这样就在用户的主目录下创建了一个 .keystore 文件

2. 配置 Tomcat 以使用 keystore 文件

打开 server.xml 找到下面被注释的这段
<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
    maxThreads="150" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS" />
-->

干掉注释,并将内容改为
<Connector SSLEnabled="true" acceptCount="100" clientAuth="false"
    disableUploadTimeout
="true" enableLookups="false" maxThreads="25"
    port
="8443" keystoreFile="/Users/loiane/.keystore" keystorePass="password"
    protocol
="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
    secure
="true" sslProtocol="TLS" />

3. 测试

启动 Tomcat 并访问 https://localhost:8443. 你将看到 Tomcat 默认的首页。

需要注意的是,如果你访问默认的 8080 端口,还是有效的。

4. 配置应用使用 SSL

打开应用的 web.xml 文件,增加配置如下:
<security-constraint>
    <web-resource-collection>
        <web-resource-name>securedapp</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

将 URL 映射设为 /* ,这样你的整个应用都要求是 HTTPS 访问,而 transport-guarantee 标签设置为 CONFIDENTIAL 以便使应用支持 SSL。

如果你希望关闭 SSL ,只需要将 CONFIDENTIAL 改为 NONE 即可。

如果是MAVEN的TOMCAT插件,则加入如下配置
<build>
        <finalName>test-dropbox</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.0</version>
                <configuration>
                    <httpsPort>8443</httpsPort>
                    <keystorePass>password</keystorePass>
                    <keystoreFile>C:\Users\PAUL\.keystore</keystoreFile>
                </configuration>
            </plugin>
        </plugins>
    </build>






posted @ 2013-10-14 08:02 paulwong 阅读(1828) | 评论 (0)编辑 收藏

xshell ubuntu 连接

用xshell连接vm上的ubuntu
1.
File->new
在host里面填写你要连接的主机的ip地址 192.168.1.x


2.点Authentication出现下面的对话框
User Name 里面填的是你要连接要主机上的用户名 随便填写
Password 你设定的密码,不要忘了。
然后你可以测试下是否可以进去了,
File->open
选择你新建的 点击connect。
碰到的问题,我在点了connect 在xshell下面出现如下的代码:
Xshell displays "Could not connect to 'hostname' (port 22): Connection failed." message.

说明没有开启SSH的22端口
在ubuntu终端下运行
sudo netstat –antup
看下面是否有一个22端口,如果没有需要安装SSHD服务,可以直接运行安装服务
sudo apt-get install openssh-server

安装完之后再查看一下是否开启了22端口,如果开启了,那么用xshell来连接基本上就没什么问题了
还有一个是在xshell中的中文乱码问题
输入:
Locale
输出:
LANG=zh_CN.UTF-8
LC_CTYPE=”zh_CN.UTF-8″
LC_NUMERIC=”zh_CN.UTF-8″
LC_TIME=”zh_CN.UTF-8″
LC_COLLATE=”zh_CN.UTF-8″
LC_MONETARY=”zh_CN.UTF-8″
LC_MESSAGES=”zh_CN.UTF-8″
LC_PAPER=”zh_CN.UTF-8″
LC_NAME=”zh_CN.UTF-8″
LC_ADDRESS=”zh_CN.UTF-8″
LC_TELEPHONE=”zh_CN.UTF-8″
LC_MEASUREMENT=”zh_CN.UTF-8″
LC_IDENTIFICATION=”zh_CN.UTF-8″
LC_ALL=
说明系统的中文编码是采用utf8的,为了在xshell中正常的显示中文,我们要把xshell编码方式改成utf8
[文件]–>[打开]–>在打开的session中选择连接的那个 ,点击properties -> [Terminal ] ,在右边的translation先选择utf8,然后重新连接服务器即可。

如何将windwos上的文件传输到虚拟机上的linux 上
输入:
rz –help
如果出现
程序“rz”尚未安装。 您可以使用以下命令安装:
sudo apt-get install lrzsz
说明你还没有安装rz 输入:
sudo apt-get install lrzsz
安装rz
切换到你要存放文件的目录
File->Transfer->Send ZMODEM,出现一个对话框,选择你要传输的文件就可以了。

posted @ 2013-10-13 08:28 paulwong 阅读(421) | 评论 (0)编辑 收藏

仅列出标题
共112页: First 上一页 56 57 58 59 60 61 62 63 64 下一页 Last