少年阿宾

那些青春的岁月

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

#

首先下载一个redis的安装包:

windows:http://code.google.com/p/servicestack/wiki/RedisWindowsDownload

linux:http://code.google.com/p/redis/downloads/list

redis-2.0.0版本: redis-2.0.0 (302)

redis-2.4.5版本: redis-2.4.5-win32-win64.zip (506)

解压后,得到一个redis的文件夹,打开文件夹得到如下图的一些文件:

安装包中是不提供redis.conf的,关于配置可以到网上搜索一下,或者从这里直接下载:redis.conf (643)

下载后可以将redis.conf放到上图所示位置!

用命令行,切换到redis的根目录,然后启动redis服务端即redis-server.exe,如下图:

 

启动后的效果图如下:

当前服务端没有1个客户端连接,因此显示0 clients,

现在分别启动两个客户端,如下图:

这里值得注意的是:当你登录redis-cli.exe的时候,服务端并没有检测到客户端的存在,也就是在客户端执行了第一次操作以后,服务端才检测到这个状态.

















posted @ 2012-11-12 20:44 abin 阅读(2916) | 评论 (0)编辑 收藏

package lc.abin.lee.basic.zip;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class CreateZip {
 public static String createZipFile(String filePath){
  String result="failure";
  try {
   FileOutputStream fileOut=new FileOutputStream("example.zip");
   CheckedOutputStream checkOut=new CheckedOutputStream(fileOut,new CRC32());
   ZipOutputStream zipOut=new ZipOutputStream(new BufferedOutputStream(checkOut));
   
   BufferedReader in=new BufferedReader(new FileReader(filePath));
   zipOut.putNextEntry(new ZipEntry(filePath));
   int line;
   while((line=in.read())!=-1){
    zipOut.write(line);
    zipOut.flush();
   }
   result="success";
   in.close();
   zipOut.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
  return result;
 }
 public static void main(String[] args) {
  String fileName="D:\\abin.txt";
  String result=createZipFile(fileName);
  System.out.println("result="+result);
 }
}



貌似还有点问题,明天解决一下
posted @ 2012-11-11 23:32 abin 阅读(416) | 评论 (0)编辑 收藏

学习了memcache,这是个好东西,分享一下自己的小实例,也方便以后查找使用

一、前期准备

1)  下载memcached服务端memcached-1.2.6-win32-bin.zip,地址:http://code.jellycan.com/memcached/

2)  下载java版客户端 java_memcached-release_2.6.1.zip
3)  解压缩memcached-1.2.6-win32-bin.zip到指定目录,例如:D:\memcached-1.2.6-win32 ,在终端(即cmd命令行界面)
 
D:\memcached-1.2.6-win32\memcached.exe -d install
D:\memcached\memcached.exe -d start
 
这样memcache就会作为windows系统服务在每次开机时启动memcache服务。
 
常用命令
 
-p 监听的端口 
-l 连接的IP地址, 默认是本机 
-d start 启动memcached服务 
-d restart 重起memcached服务 
-d stop|shutdown 关闭正在运行的memcached服务 
-d install 安装memcached服务 
-d uninstall 卸载memcached服务 
-u 以的身份运行 (仅在以root运行的时候有效) 
-m 最大内存使用,单位MB。默认64MB 
-M 内存耗尽时返回错误,而不是删除项 
-c 最大同时连接数,默认是1024 
-f 块大小增长因子,默认是1.25 
-n 最小分配空间,key+value+flags默认是48 
-h 显示帮助 



spring-memcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:cache
="http://www.springframework.org/schema/cache"
    xmlns:context
="http://www.springframework.org/schema/context"
    xmlns:mvc
="http://www.springframework.org/schema/mvc" xmlns:oxm="http://www.springframework.org/schema/oxm"
    xmlns:p
="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd  
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd  
       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">

    
<bean id="memcachedPool" class="com.danga.MemCached.SockIOPool"
        factory
-method="getInstance" init-method="initialize" destroy-method="shutDown">
        
<constructor-arg>
            
<value>neeaMemcachedPool</value>
        
</constructor-arg>
        
<property name="servers">
            
<list>
                
<value>127.0.0.1:11211</value>
            
</list>
        
</property>
        
<property name="initConn">
            
<value>20</value>
        
</property>
        
<property name="minConn">
            
<value>10</value>
        
</property>
        
<property name="maxConn">
            
<value>50</value>
        
</property>
        
<property name="maintSleep">
            
<value>3000</value>
        
</property>
        
<property name="nagle">
            
<value>false</value>
        
</property>
        
<property name="socketTO">
            
<value>3000</value>
        
</property>
    
</bean>
    
    
<bean id="memcachedClient" class="com.danga.MemCached.MemCachedClient">
        
<constructor-arg>
            
<value>neeaMemcachedPool</value>
        
</constructor-arg>
    
</bean>
    

</beans>






测试类:

package com.abin.lee.spring.memcache;

import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.danga.MemCached.MemCachedClient;

public class MemcacheUtilTest {
 static MemCachedClient memcachedClient;
 @BeforeClass
 public static void setUpBeforeClass() throws Exception {
  ApplicationContext context= new ClassPathXmlApplicationContext("com/abin/lee/spring/memcache/spring-memcache.xml");
  memcachedClient= (MemCachedClient)context.getBean("memcachedClient");
 }

 @Test
 public void test() {
  memcachedClient.set("name", "abin");
  System.out.println(memcachedClient.get("name"));
 }
}

posted @ 2012-11-10 22:33 abin 阅读(1329) | 评论 (1)编辑 收藏

  1. 看到一个题目:针对下面的程序,写出magic方法 让整个程序只打印出step1,step2 不打印step3  

    public static void enter(Object obj) {
        System.out.println("Step 1");
        try {
   magic1(obj);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
        System.out.println("Step 2");
        synchronized (obj) {
            System.out.println("Step 3 (never reached here)"); 
        }
    }

 题目的意思很容易理解,可是要做出这道题目需要对多线程的基本改进非常的理解。

下面列出基本思路:

 

 

主线程想获取obj的锁,但是获取不到,说明子线程始终在占据着这个对象的锁。

同时主线程又能返回。

那现在就要实现让子线程先跑,然后再唤醒主线程。这个显然是锁的占有和唤醒,那么问题来了,将什么做为这个锁呢?如果是obj的话,不可能,因为子线程显然不能在放掉obj.

那么只能是子线程自己的锁。

 

下边是程序

    static void magic1(final Object obj) throws Exception{
     final Thread t = new Thread(){
      public void run(){
       synchronized(this){
        synchronized(obj){
         try {
          notify();
       join();
      } catch (InterruptedException e) {
      }
        }
        
       }
       
      }
     };
     synchronized(t){
      t.start();
      t.wait();
     }
    }




posted @ 2012-11-09 21:37 abin 阅读(343) | 评论 (0)编辑 收藏

面试hadoop可能被问到的问题,你能回答出几个 ?

1、hadoop运行的原理?

2、mapreduce的原理?

3、HDFS存储的机制?

4、举一个简单的例子说明mapreduce是怎么来运行的 ?

5、面试的人给你出一些问题,让你用mapreduce来实现?

      比如:现在有10个文件夹,每个文件夹都有1000000个url.现在让你找出top1000000url。

6、hadoop中Combiner的作用?

Src: http://p-x1984.javaeye.com/blog/859843


 

Q1. Name the most common InputFormats defined in Hadoop? Which one is default ? 
Following 2 are most common InputFormats defined in Hadoop 
- TextInputFormat
- KeyValueInputFormat
- SequenceFileInputFormat
Q2. What is the difference between TextInputFormatand KeyValueInputFormat class
TextInputFormat: It reads lines of text files and provides the offset of the line as key to the Mapper and actual line as Value to the mapper
KeyValueInputFormat: Reads text file and parses lines into key, val pairs. Everything up to the first tab character is sent as key to the Mapper and the remainder of the line is sent as value to the mapper.

Q3. What is InputSplit in Hadoop
When a hadoop job is run, it splits input files into chunks and assign each split to a mapper to process. This is called Input Split 

Q4. How is the splitting of file invoked in Hadoop Framework 
It is invoked by the Hadoop framework by running getInputSplit()method of the Input format class (like FileInputFormat) defined by the user 

Q5. Consider case scenario: In M/R system,
    - HDFS block size is 64 MB
    - Input format is FileInputFormat
    - We have 3 files of size 64K, 65Mb and 127Mb 
then how many input splits will be made by Hadoop framework?
Hadoop will make 5 splits as follows 
- 1 split for 64K files 
- 2  splits for 65Mb files 
- 2 splits for 127Mb file 

Q6. What is the purpose of RecordReader in Hadoop
The InputSplithas defined a slice of work, but does not describe how to access it. The RecordReaderclass actually loads the data from its source and converts it into (key, value) pairs suitable for reading by the Mapper. The RecordReader instance is defined by the InputFormat 

Q7. After the Map phase finishes, the hadoop framework does "Partitioning, Shuffle and sort". Explain what happens in this phase?
- Partitioning
Partitioning is the process of determining which reducer instance will receive which intermediate keys and values. Each mapper must determine for all of its output (key, value) pairs which reducer will receive them. It is necessary that for any key, regardless of which mapper instance generated it, the destination partition is the same

- Shuffle
After the first map tasks have completed, the nodes may still be performing several more map tasks each. But they also begin exchanging the intermediate outputs from the map tasks to where they are required by the reducers. This process of moving map outputs to the reducers is known as shuffling.

- Sort
Each reduce task is responsible for reducing the values associated with several intermediate keys. The set of intermediate keys on a single node is automatically sorted by Hadoop before they are presented to the Reducer 

Q9. If no custom partitioner is defined in the hadoop then how is data partitioned before its sent to the reducer 
The default partitioner computes a hash value for the key and assigns the partition based on this result 

Q10. What is a Combiner 
The Combiner is a "mini-reduce" process which operates only on data generated by a mapper. The Combiner will receive as input all data emitted by the Mapper instances on a given node. The output from the Combiner is then sent to the Reducers, instead of the output from the Mappers.
Q11. Give an example scenario where a cobiner can be used and where it cannot be used
There can be several examples following are the most common ones
- Scenario where you can use combiner
  Getting list of distinct words in a file

- Scenario where you cannot use a combiner
  Calculating mean of a list of numbers 
Q12. What is job tracker
Job Tracker is the service within Hadoop that runs Map Reduce jobs on the cluster

Q13. What are some typical functions of Job Tracker
The following are some typical tasks of Job Tracker
- Accepts jobs from clients
- It talks to the NameNode to determine the location of the data
- It locates TaskTracker nodes with available slots at or near the data
- It submits the work to the chosen Task Tracker nodes and monitors progress of each task by receiving heartbeat signals from Task tracker 

Q14. What is task tracker
Task Tracker is a node in the cluster that accepts tasks like Map, Reduce and Shuffle operations - from a JobTracker 

Q15. Whats the relationship between Jobs and Tasks in Hadoop
One job is broken down into one or many tasks in Hadoop

Q16. Suppose Hadoop spawned 100 tasks for a job and one of the task failed. What willhadoop do ?
It will restart the task again on some other task tracker and only if the task fails more than 4 (default setting and can be changed) times will it kill the job

Q17. Hadoop achieves parallelism by dividing the tasks across many nodes, it is possible for a few slow nodes to rate-limit the rest of the program and slow down the program. What mechanism Hadoop provides to combat this  
Speculative Execution 

Q18. How does speculative execution works in Hadoop 
Job tracker makes different task trackers process same input. When tasks complete, they announce this fact to the Job Tracker. Whichever copy of a task finishes first becomes the definitive copy. If other copies were executing speculatively, Hadoop tells the Task Trackers to abandon the tasks and discard their outputs. The Reducers then receive their inputs from whichever Mapper completed successfully, first. 

Q19. Using command line in Linux, how will you 
- see all jobs running in the hadoop cluster
- kill a job
hadoop job -list
hadoop job -kill jobid 

Q20. What is Hadoop Streaming 
Streaming is a generic API that allows programs written in virtually any language to be used asHadoop Mapper and Reducer implementations 


Q21. What is the characteristic of streaming API that makes it flexible run map reduce jobs in languages like perl, ruby, awk etc. 
Hadoop Streaming allows to use arbitrary programs for the Mapper and Reducer phases of a Map Reduce job by having both Mappers and Reducers receive their input on stdin and emit output (key, value) pairs on stdout.
Q22. Whats is Distributed Cache in Hadoop
Distributed Cache is a facility provided by the Map/Reduce framework to cache files (text, archives, jars and so on) needed by applications during execution of the job. The framework will copy the necessary files to the slave node before any tasks for the job are executed on that node.
Q23. What is the benifit of Distributed cache, why can we just have the file in HDFS and have the application read it 
This is because distributed cache is much faster. It copies the file to all trackers at the start of the job. Now if the task tracker runs 10 or 100 mappers or reducer, it will use the same copy of distributed cache. On the other hand, if you put code in file to read it from HDFS in the MR job then every mapper will try to access it from HDFS hence if a task tracker run 100 map jobs then it will try to read this file 100 times from HDFS. Also HDFS is not very efficient when used like this.

Q.24 What mechanism does Hadoop framework provides to synchronize changes made in Distribution Cache during runtime of the application 
This is a trick questions. There is no such mechanism. Distributed Cache by design is read only during the time of Job execution

Q25. Have you ever used Counters in Hadoop. Give us an example scenario
Anybody who claims to have worked on a Hadoop project is expected to use counters

Q26. Is it possible to provide multiple input to Hadoop? If yes then how can you give multiple directories as input to the Hadoop job 
Yes, The input format class provides methods to add multiple directories as input to a Hadoop job

Q27. Is it possible to have Hadoop job output in multiple directories. If yes then how 
Yes, by using Multiple Outputs class

Q28. What will a hadoop job do if you try to run it with an output directory that is already present? Will it
- overwrite it
- warn you and continue
- throw an exception and exit

The hadoop job will throw an exception and exit.

Q29. How can you set an arbitary number of mappers to be created for a job in Hadoop 
This is a trick question. You cannot set it

Q30. How can you set an arbitary number of reducers to be created for a job in Hadoop 
You can either do it progamatically by using method setNumReduceTasksin the JobConfclass or set it up as a configuration setting

 

Src:http://xsh8637.blog.163.com/blog/#m=0&t=1&c=fks_084065087084081065083083087095086082081074093080080069

posted @ 2012-11-09 19:48 abin 阅读(2341) | 评论 (0)编辑 收藏

我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索。这些是从网上找到的资料,因为有时很长时间不会用到,当要用的时候经常弄混了,所以放到这里方便使用。 
which       查看可执行文件的位置 
whereis    查看文件的位置 
locate       配 合数据库查看文件位置 
find          实际搜寻硬盘查询文件名称 

1、which 
语法: 
[root@redhat ~]# which 可执行文件名称 
例如: 
[root@redhat ~]# which passwd 
/usr/bin/passwd 
which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件 

2、whereis 
语法: 
[root@redhat ~]# whereis [-bmsu] 文件或者目录名称 
参数说 明: 
-b : 只找二进制文件 
-m: 只找在说明文件manual路径下的文件 
-s : 只找source源文件 
-u : 没有说明文档的文件 
例如: 
[root@redhat ~]# whereis passwd 
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz 
将和passwd文件相关的文件都查找出来 

[root@redhat ~]# whereis -b passwd 
passwd: /usr/bin/passwd /etc/passwd 
只将二进制文件 查找出来 

和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。 
但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。 

3、 locate 
语法: 
[root@redhat ~]# locate 文件或者目录名称 
例 如: 
[root@redhat ~]# locate passwd 
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_DB_war/DB.war/jsp/as/user/passwd.jsp
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_admin_war/admin.war/jsp/platform/passwd.jsp
/lib/security/pam_unix_passwd.so 
/lib/security/pam_passwdqc.so 
/usr/include/rpcsvc/yppasswd.x 
/usr/include/rpcsvc/yppasswd.h 
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/rpcsvc/yppasswd.ph 
/usr/lib/kde3/kded_kpasswdserver.la 
/usr/lib/kde3/kded_kpasswdserver.so 
/usr/lib/ruby/1.8/webrick/httpauth/htpasswd.rb 
/usr/bin/vncpasswd 
/usr/bin/userpasswd 
/usr/bin/yppasswd 
………… 

4、 find 
语法: 
[root@redhat ~]# find 路径 参数 
参 数说明: 
时间查找参数: 
-atime n :将n*24小时内存取过的的文件列出来 
-ctime n :将n*24小时内改变、新增的文件或者目录列出来 
-mtime n :将n*24小时内修改过的文件或者目录列出来 
-newer file :把比file还要新的文件列出来 
名称查找参数: 
-gid n       :寻找群组ID为n的文件 
-group name  :寻找群组名称为name的文件 
-uid n       :寻找拥有者ID为n的文件 
-user name   :寻找用户者名称为name的文件 
-name file   :寻找文件名为file的文件(可以使用通配符) 
例 如: 
[root@redhat ~]# find / -name zgz 
/home/zgz 
/home/zgz/zgz 
/home/weblogic/bea/user_projects/domains/zgz 
/home/oracle/product/10g/cfgtoollogs/dbca/zgz 
/home/oracle/product/10g/cfgtoollogs/emca/zgz 
/home/oracle/oradata/zgz 

[root@redhat ~]# find / -name '*zgz*' 
/home/zgz 
/home/zgz/zgz1 
/home/zgz/zgzdirzgz 
/home/zgz/zgz 
/home/zgz/zgzdir 
/home/weblogic/bea/user_projects/domains/zgz 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00006 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00002 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00004 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00008 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00005 

当我们用whereis和locate无法查找到我们需要的文件时,可以使用find,但是find是在硬盘上遍历查 找,因此非常消耗硬盘的资源,而且效率也非常低,因此建议大家优先使用whereis和locate。 
locate 是在数据库里查找,数据库大至每天更新一次。 
whereis 可以找到可执行命令和man page 
find 就是根据条件查找文件。 
which 可以找到可执行文件和别名(alias)
posted @ 2012-11-09 16:19 abin 阅读(367) | 评论 (0)编辑 收藏

nmap 使用介绍

nmap是目前为止最广为使用的国外端口扫描工具之一。我们可以从http://www.insecure.org/进 行下载,可以很容易的安装到Windows和unix操作系统中,包括mac os x(通过configure、make 、make install等命令)也可以直接从http://www.insecure.org/下载windows二进制(包括所需要的winpcap)也可以从 http://www.nmapwin.org/获得nmap的图形windows。

扫描主机

$ nmap -sT 192.168.1.18 
Starting nmap 3.48(http://www.insecure.org/nmap/)at 2007-10-10 18:13
EDT Interesting ports on gamebase(192.168.1.18)
 port state serverice
22/tcp open ssh
111/tcp open sunrpc
..........
$ nmap -sR 192.168.1.18
Startingnmap 3.48(http://www.insecure.org/nmap/)at 2007-10-10 18:13
EDT Interesting ports on gamebase(192.168.1.18)
port state serverice
22/tcp open ssh
111/tcp open sunrpc
..........

我们可以使用ping扫描的方法(-sP),与fping的工作方式比较相似,它发送icmp回送请求到指定范围的ip地址并等待响应。现在很多主 机在扫描的时候都做了处理,阻塞icmp请求,这种情况下。nmap将尝试与主机的端口80进行连接,如果可以接收到响应(可以是syn/ack,也可以 是rst),那么证明主机正在运行,反之,则无法判断主机是否开机或者是否在网络上互连。

扫描tcp端口

这里-sR是怎样在打开的端口上利用RPC命令来判断它们是否运行了RPC服务。

nmap可以在进行端口扫描的tcp报文来做一些秘密的事情。首先,要有一个SYN扫描(-sS),它只做建立TCP连接的前面一些工作,只发送一 个设置SYN标志的TCP报文,一个RESET报文,那么nmap假设这个端口是关闭的,那么就不做任何事情了。如果接收到一个响应,它并不象正常的连接 一样对这个报文进行确认,而是发送一个RET报文,TCP的三次握手还没有完成,许多服务将不会记录这次连接。

有的时候,nmap会告诉我们端口被过滤,这意味着有防火墙或端口过滤器干扰了nmap,使其不能准确的判断端口是打开还是关闭的,有的防火墙只能过滤掉进入的连接。

扫描协议

如果试图访问另一端无程序使用的UDP端口,主机将发回一个icmp“端口不可达”的提示消息,IP协议也是一样。每个传输层的IP协议都有一个相 关联的编号,使用最多的是ICMP(1)、TCP(6)和UDP(17)。所有的IP报文都有一个“协议”域用于指出其中的传输层报文头所使用的协议。如 果我们发送一个没有传输层报文头的原始IP报文并把其协议域编号为130[该编号是指类似IPSEC协议的被称为安全报文外壳或SPS协议],就可以判断 这个协议是否在主机上实现了。如果我们得到的是ICMP协议不可达的消息,意味着该协议没有被实现,否则就是已经实现了,用法为-sO.

隐蔽扫描行为

nmap给出了几个不同的扫描选项,其中一些可以配套着隐藏扫描行为,使得不被系统日志、防火墙和IDS检测到。提供了一些随机的和欺骗的特性。具体例子如下:

FTP反弹,在设计上,FTP自身存在一个很大的漏洞,当使用FTP客户机连接到FTP服务器时,你的客户机在TCP端口21上与FTP服务器对 话,这个TCP连接称为控制连接。FTP服务器现在需要另一条与客户机连接,该连接称为数据连接,在这条连接上将传送实际的文件数据,客户机将开始监听另 一个TCP端口上从服务器发挥的数据连接,接下来执行一个PORT命令到服务器,告诉它建立一条数据连接到客户机的IP地址和一个新打开的端口,这种操作 方法称为主动传输。许多客户机使用网络地址转换或通过防火墙与外界连接,所以主动传输FTP就不能正常工作,因为由服务器建立的客户机的连接通常不允许通 过。

被动传输是大多数FTP客户机和服务器所使用的方法,因为客户机既建立控制连接又建立数据连接,这样可以通过防火墙或NAT了。

FTP的PORT命令,用来告诉FTP连接的服务器,使得与刚刚打开的用于数据连接的端口之间建立一个连接。由于我们不仅指定端口而且指定连接所用 的IP地址,所以客户端也可以通过PORT命令让服务器连接到任何地方。所以我们一样可以让nmap用这个方法进行防火墙穿透。nmap做的所有工作是与 一台服务器建立一个主动模式的FTP连接,并发送一个包含它试图扫描的主机IP地址和端口号的PORT命令。

nmap -b aaa@ftp.target.com -p 6000 192.168.1.226
nmap 与ftp服务器的对话的例子:
server:220  target ftp server version 4 ready
client:user  anonymous
server: 331 Guest login ok ,send e-mail as password
client:pass
server :230 login successful
client:PORT 192,168,1.226,23,112
server:200 PORT command successful
client:LIST
server:150 Opening ASCII connection for '/bin/ls'
server:226 Transfer complete

PORT命令起作用,可以制造是别人进行端口扫描,扫描任何FTP服务器所能访问的主机,绕过防火墙和端口过滤器,但还是存在一些危险的,如果对方登陆到了你的这个匿名FTP服务器上,从日志查找到相应的匿名FTP连接,从而知道你的IP地址,这样就直接暴露了。

nmap -sI 空闲扫描,主要是欺骗端口扫描的源地址。

nmap -f 可以把TCP头分片的IP报文进行一些隐蔽的扫描。不完整的TCP报文不被防火墙阻塞也不被IDS检测到。

nmap-D
选择几台肉鸡,并使用-D标志在命令行中指定它们。namp通过诱骗的IP地址来进行欺骗式端口扫描,而系统管理员可以同时看到不同的端口扫描,而只有一个是真实的,很好的保护了自己。

os指纹识别
这个是nmap最有用的功能之一,就是可以鉴别远程主机。通过简单的执行网络扫 描,nmap通常可以告诉你远程主机所运行的OS,甚至详细到版本号。当你指定-Q标志时,nmap将用几种不同的技术从主机返回IP报文中寻找这些鉴别 信息。通过发送特别设计的TCP和UDP头,nmap可以得到远程主机对TCP/IP协议栈的处理方法。它将分析结果与保存在文件中的已知特征信息进行比 较。

OS鉴别选项也可以让nmap对TCP报文进行分析以决定另外一些信息,如系统的启动时间,TCP序列号,预测的序列号使我们更容易截获报文并猜测序列号从而伪造TCP连接。

nmap命令使用详细解释

-P0 -PT -PS -PU -PE -PP -PM -PB 当nmap进行某种类型的端口或协议扫描时,通常都会尝试先ping 主机,这种尝试可使nmap不会浪费时间在那些未开机的主机上,但是许多主机与防火墙会阻塞ICMP报文,我们希望能通过控制使用。

-P0  告诉nmap不ping 主机,只进行扫描

-PT  告诉nmap使用TCP的ping

-PS  发送SYN报文。

-PU  发送一个udp ping

-PE  强制执行直接的ICMP ping

-PB  这是默认类型,可以使用ICMP ping 也可以使用TCP ping .

-6   该标志允许IPv6支持

-v  -d  使用-v选项可得到更详细的输出,而-d选项则增加调试输出。

-oN  按照人们阅读的格式记录屏幕上的输出,如果是在扫描多台机器,则该选项很有用。

-oX  以xml格式向指定的文件记录信息

-oG  以一种易于检索的格式记录信息,即每台主机都以单独的行来记录所有的端口和0s信息。

-oA  使用为基本文件名,以普通格式(-oN)、XML格式(-oX)和易于检索的格式(-oG)jilu  xinxi 

-oM  把输出格式化为机器可阅读的文件

-oS  把输出进行傻瓜型排版

--resume如果你取消了扫描,但生成了供人或者供机器阅读的文件,那么可以把该文件提供给nmap继续让它扫描。

-iR-iL可以不在命令行中指定目标主机,而是使用-iR选项随即产生待扫描的主机,或者使用-iL选项从一个包含主机名或IP地址列表的文件中读取目标主机,这些主机名或IP地址使用空格、制表符或换行隔开。

-F nmap只扫描在nmap内建的服务文件中已知的端口,如果不指定该选项,nmap将扫描端口 1-1024及包含在nmap-services文件中的所有其他端口。如果用-sO选项扫描协议,nmap将用它内建的协议文件(nmap- protocols文件)而不是默认地扫描所有256个协议。

-A nmap使用所有的高级扫描选项

-p 参数可以是一个单独的端口、一个用逗号隔开的端口列表、一个使用“-”表示的端口范围或者上述格式的任意组合。如果没有指定该选项,nmap将对包含前1024个端口的所有端口进行一次快速扫描。

-e在多穴主机中,可以指定你用来进行网络通信的网络接口。

-g可以选择一个源端口,从该端口执行所有的扫描。

--ttlnmap其发送的任何报文在到中间路由器的跳后会失效。

--packet-trace 可以显示扫描期间nmap发送和接收的各个报文的详细列表,这对调试非常有用。要与-o选项之一联合使用,需要根权限,以将所有的数据记录到文件。

--scanflags可以使用这个选项手工的指定欲在扫描报文中设置的TCP标志。也可以指定TCP标志的OOred值的整数形式,或者标志的字符串表示形式。

以上介绍的就是nmap在windows下和unix中的命令介绍。


posted @ 2012-11-09 13:11 abin 阅读(1824) | 评论 (0)编辑 收藏

在主界面Filter栏里输入ip.addr==192.168.1.98&&http就可以了,合法的过滤条件的底色为浅绿色。Capture filter和display filter语法不同,后者的大多数表达法都不:适用于前者。另外,ip.src仅过滤源地址为指定地址的数据包,ip.dst仅过滤目的地址为指定地址的数据包,ip.addr或许才是你需要的。
posted @ 2012-11-09 12:43 abin 阅读(611) | 评论 (0)编辑 收藏

如果你是一位网络应用开发者,你在开发过程中肯定会使用到网络协议分析器(network protocol analyzer), 我们也可以称之为“嗅探器”。eEye 公司有一款很不错的网络协议分析器产品 “Iris”, 我一直使用它的 4.07 版本,由于其功能完备,一直没有太多的关注其他同类软件,但此版本不能工作在 Windows Vista 上,也不能对无线网络适配器进行分析,而我恰好要在 Vista 上做很多开发工作,又经常使用无线网络连接的笔记本电脑,Iris 4.07 无法满足我的工作需求了。

幸运的是,Wireshark(线鲨)一款基于 winpcap/tcpdump 的开源网络协议分析软件对vista和无线网络的兼容都很好。他的前身就是Ethereal。他具备了和 Iris 同样强大的 Decode 能力,甚至线性截包的能力超过 iris。要用好分析器很重要的一点就是设置好 Filter(过滤器),在这一点上 Wireshark 的过滤表达式更显强大。

我们来看个几个简单的过滤器例子:

“ip.dst==211.244.254.1” (所有目标地址是211.244.254.1的ip包)

“tcp.port==80″ (所有tcp端口是80的包)

你可以把上述表达式用 and 连接起来

“(ip.dst==211.244.254.1) and (tcp.port==80)”

或者再稍加变换

“(ip.dst==211.244.254.1) and !(tcp.port==80)” (所有目的ip是211.244.254.1非 80 端口)

使用表达式设置过滤器比之在界面上选择/填空更加快捷灵活,如果你不熟悉这些表达式,Wireshark 也提供了设置界面,并且最终生成表达式,这样也方便了使用者学习。

Wireshark 还提供了更高级的表达式特性,请看如下表达式

(tcp.port==80) and (ip.dst==211.244.254.1) and (http[5:2]==7075)

对象 http 就是 wireshark 解码以后的 http 数据部分 http[5:2] 就是指从 下标 5 开始的两个字节,请思考一下这样的http 请求

GET /pu*****

怎么样,如果你在浏览器中访问 http://www.google.com/pu 或者 http://www.google.com/put 或者 http://www.google.com/pub 都会被记录下来,匹配 *****pu***… 了

这样我们就可以方便的将我们需要检测的某个特别的网络指令过滤出来。

比如我在帮某硬件编写上位机程序的时候,指令总是以固定格式发送的,很容易我们就能过滤掉烦人的无用的信息,大大的提升了工作效率。

转自cp62的专栏,http://blog.csdn.net/cp62/archive/2008/12/25/3603372.aspx

posted @ 2012-11-09 12:41 abin 阅读(2141) | 评论 (0)编辑 收藏

package com.abin.lee.servlet.mythread.runnable;

import java.util.concurrent.atomic.AtomicInteger;

public class SumThread implements Runnable{
 private  AtomicInteger num=new AtomicInteger(0);
 public void run(){
  while(num.get()<100){
   try {
    Thread.sleep(100);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   if(num.get()==40){
    Thread thread2=new Thread(this,"thread2");
    thread2.start();
   }
   System.out.println(Thread.currentThread().getName()+":"+num.getAndIncrement());
  }
 }
 
}












package com.abin.lee.servlet.mythread.runnable;

public class SumThreadTest {
 public static void main(String[] args) {
  SumThread ru=new SumThread();
  Thread thread1=new Thread(ru,"thread1");
  thread1.start();
 }
}

posted @ 2012-11-05 22:40 abin 阅读(1559) | 评论 (0)编辑 收藏

仅列出标题
共50页: First 上一页 22 23 24 25 26 27 28 29 30 下一页 Last