The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

          #

              在Linux 系統中,所有的用戶和組像一個國家。如果國家要繁榮昌盛的話,需要治理得當,需要有主席或者總統,以及地方官員和老百姓組成。在linux 中如果你對安全需求比較苛刻,完全可以限制用戶的各種行為,不同用戶的權限是不同的。    
              在linux中系統中,它并不認識帳號名稱。它認識的是我們的帳號ID,帳號ID保存在/etc/passwd文件中。我們在登錄linux主機時,在輸入完帳號和密碼時,linux會先查找/etc/passwd文件中是否有這個帳號,如果沒有則跳出,如果有的話,他會讀取該帳號的user ID和group ID同時該帳號的根目錄和shell也讀了出來。然后在去核對密碼表,在/etc/shadow中找出我們剛剛輸入的帳號和userID,核對我們輸入密碼是否正確。一切正確我們可以登錄到當前用戶shell。那么,我們首先了解一下用戶帳號文件。
              用戶管理一般需要知道      /etc/passwd  /etc/shadow  /etc/group 
              add by warden2010 20100104
              1./etc/passwd我們使用more查看一下這個文件
              我們首先看第一行root這一行,一共有七項,每一項使用:分開,他們代表的意思如下:
              帳號名稱:帳號名稱由于對應用戶ID,這個是系統默認用戶root超級管理員,在同一個系統帳號名稱是唯一的,長度根據不同的linux系統而定,一般是8位。
              密碼:由于系統中還有一個/etc/shadow文件用于存放加密后的口令,所以在這里這一項是“x”來表示,如果用戶沒有設置口令,則該項為空。
              用戶ID:這個是系統內部用于來識別不同的用戶的,不同的用戶識別碼不同,其中用戶ID有以下幾種:
              0代表系統管理員,如果你想建立一個系統管理員的話,可以建立一個普通帳戶,然后將該賬戶的用戶ID改為0即可。
              1-500系統預留的ID,500以上是普通用戶使用。
              組ID:其實這個和用戶ID差不多,用來規范群組,他與/etc/group有關。

              描述信息:這個字段幾乎沒有什么作用,只是用來解釋這個帳號的意義。

              用戶根目錄:就是用戶登錄系統的起始目錄,用戶登錄系統后將首先進入該目錄。root用戶默認的是/root,普通用戶的是/home/用戶名。

              用戶登錄shell:就是用戶登錄系統時使用的shell,關于shell我們會在以后專門的研究一下。

              2./etc/shadow

              在早期的unix操作系統中,用戶的帳號信息和口令信息都保存在passwd文件中,盡管系統已經對口令進行了加密,并且以密文的方式保存在passwd文件中,但是由于passwd文件對于系統中的所有用戶是可讀的,口令比較容易破解,存在較大的安全隱患。現在使用“shadow”文件保存密文的用戶口令,使用passwd文件保存用戶帳號其它信息。“shadow”文件只有管理員用戶才可以讀取其中的內容。由于這個文件可能被破解,所以一定不要將該文件內容泄露給他人,保證系統安全。

              同樣,我們還是分析第一行,一共有九項,分別說明一下:

              帳戶名稱:和passwd對應,和passwd的意思相同。

              密碼:這才是真正的密碼,并且已經加密過了,只能看到一些特殊符號。需要注意的是這些密碼很難破解,但是不等于不能。還有密碼欄的第一個字符為“*”表示這個用戶不用來登錄,如果那個用戶不想讓他登錄了,可以在他前面加個星。

              上次改動密碼的日期:這段記錄了改動密碼的最后日期,為什么是13798呢?這是因為linux計算日期的方法是以1970年1月1日作為1,1971年1月1日就是366,依次類推到我修改密碼的日期表示為13798了。

              密碼不可被改動的天數:由于害怕密碼被人盜取而危害到整個系統的安全,所以安排了這個字段,你必須在這個時間內重新修改密碼,否則這個帳號將暫時失效。上面的99999,表示密碼不需要重新輸入,最好設定一段時間修改密碼。確保系統安全。

              密碼變更期期限快到前的警告期:當帳號的密碼失效期限快到時,系統依據這個字段的設定發出警告,提醒用戶“再過n天您的密碼將過期,請盡快重新設定密碼。默認的是七天。

              帳號失效期:如果用戶過了警告期沒有重新輸入密碼,使得密碼失效,而該用戶在這個字段限定的時間內又沒有向管理員反映,讓帳號重新啟用,那么這個帳號將暫時失效。

              帳號取消日期:這個日期跟第三個字段一樣,都是使用1970年以來的日期設定方法。這個字段表示:這個帳號在此字段規定的日期之后將無法再使用。這個字段通常用于收費服務系統中,可以規定一個日期讓該帳號不能再使用。

              保留:最后一個字段是保留的,看以后有沒有新功能加入。

              3. /etc/group查看一下這個文件

              我們還是分析第一行,一共有四項,依次為:

              群組名稱:就是群組的名稱了。

              群組密碼:通常不需設定,因為我們很少使用群組登錄。不過這個密碼也被記錄在/etc/gshadow中了。

              群組ID:也就是組ID了。

              支持帳號的名稱:這個群組的所有帳號。如果你想讓用戶qiuri也屬于root這個群組,就在第一行最后加上“,qiuri”注意添加的時候沒有空格。

              4. adduser添加用戶

              如果沒有特殊的要求,通常我們使用adduser 用戶名稱直接創建用戶帳號。例如我們創建qiuri帳戶:

              由于一般新創建的帳號都會在剛才我們說的三個文件的最后一行添加一行內容,我們驗證一下:

              我們使用這條命令是通過/etc/login.defs和/etc/default/useradd這兩個默認帳號設定文件來實現創建用戶的。

              這個文件中我們有必要了解一下,SKEL這個選項,用戶的根目錄內容是從/etc/skel這個目錄下復制過去的。在手動添加用戶的時候有用。查看一下這個目錄下的內容:

              這條命令還有好多的參數舉例幾個,供大家參考一下:

              adduser [-u uid][-g group][-d home][-s shell]

              -u:直接給出userID -g:直接給出GID

              -d:直接將根目錄建立在已存在目錄 -s:定義shell

              5.passwd設置用戶密碼
              默認的情況下,在添加完用戶后并沒有設置用戶的密碼,因此建立的用戶帳號即使存在也不能登陸系統。需要使用passwd命令對用戶帳號設置密碼才可以用于登陸系統。這條命令分為管理員給用戶修改密碼和用戶自己登錄系統自己修改密碼。

              管理員root給用戶修改密碼,例如:創建用戶qiuri,然后設置密碼

              管理員給用戶設置密碼以命令passwd [用戶名]來設置密碼,在輸入密碼的過程中為了避免輸入錯誤,將連續輸入兩次。如果兩次輸入的密碼相同,表示輸入的密碼正確,同時將密碼以加密的方式保存到了shadow文件中。設置完以后我們可以使用用戶qiuri登錄。qiuri用戶自己修改一下密碼。
              . 增加一個新用戶 
              以下是操作一些具體的語法,可以通過man useradd 查看幫助命令
              在Linux系統中,只有root用戶才能夠創建一個新用戶,如下的命令將新建一個登錄名user1的用戶。 
              # useradd user1 
              但是,這個用戶還不能夠登錄,因為還沒給它設置初始密碼,而沒有密碼的用戶是不能夠登錄系統的。在默認情況下,將會在/home目錄下新建一個與用戶名相同的用戶主目錄。如果需要另外指定用戶主目錄的話,那么可以使用如下命令: 
              # useradd -d /home/xf user1 
              同時,該用戶登錄時將獲得一個Shell程序:/bin/bash,而假如你不想讓這個用戶登錄,也就可以指定該用戶的Shell程序為:/bin/false,這樣該用戶即使登錄,也不能夠執行Linux下的命令: 
              # useradd -s /bin/false user1 
              在Linux中,新增一個用戶的同時會創建一個新組,這個組與該用戶同名,而這個用戶就是該組的成員。如果你想讓新的用戶歸屬于一個已經存在的組,則可以使用如下命令: 
              # useradd -g user user1 
              這樣該用戶就屬于user組的一員了。而如果只是想讓其再屬于一個組,那么應該使用: 
              # useradd -G user user1 
              完成了這一操作后,你還應該使用passwd命令為其設置一個初始密碼。 
              
              2. 刪除一個用戶 
              刪除用戶,只需使用一個簡單的命令“userdel 用戶名”即可。不過最好將它留在系統上的文件也刪除掉,你可以使用“userdel -r 用戶名”來實現這一目的。 
              
              3. 修改用戶屬性 
              在前面我們看到了在新建一個用戶的時候如何指定它的用戶主目錄,如何指定它的Shell,如何設置它所屬的組…等等。在Linux中提供了一個命令來實現: 
              usermod -g組名 -G 組名 -d 用戶主目錄 -s 用戶Shell 
              還有一種直接的方法,那就是修改/etc/passwd文件,在這個文件中每個用戶占用一行,它的內容為: 
              用戶名:密碼:用戶ID:組ID:用戶全名:用戶主目錄:用戶Shell 
              不過值得注意的是,密碼這一項通常是用一個*號代替的,你是看不到的。 
              
              4. 增加一個組 
              還記得Linux的文件可以為同組的人、非同組的人設置不同的訪問權限嗎?我們可以根據自己的需要創建用戶組: 
              groupadd 組名 
              
              5. 刪除一個組 
              同樣的,我們有時會需要刪除一個組,它的命令就是groupdel 組名。 
              
              6. 修改組成員 
              如果我們需要將一個用戶加入一個組,只需編輯/etc/group文件,將用戶名寫到組名的后面。例如將newuser用戶加入到softdevelop組,只需找到softdevelop這一行: 
              softdevelop:x:506:user1,user2 
              然后在后面加上newuser,形成: 
              softdevelop:x:506:user1,user2,newuser 
              另外,在Red Hat Linux中還提供一個圖形化的用戶管理工具:userconf,通過它可以更直接地進行用戶管理。

          posted @ 2013-06-15 22:55 Eric_jiang 閱讀(237) | 評論 (0)編輯 收藏

          按ESC鍵 跳到命令模式,然后:

          :w 保存文件但不退出vi
          :w file 將修改另外保存到file中,不退出vi
          :w! 強制保存,不推出vi
          :wq 保存文件并退出vi
          :wq! 強制保存文件,并退出vi
          q: 不保存文件,退出vi
          :q! 不保存文件,強制退出vi
          :e! 放棄所有修改,從上次保存文件開始再編輯
          posted @ 2013-06-15 21:27 Eric_jiang 閱讀(2447) | 評論 (0)編輯 收藏

          1.在圖像界面關閉x window:
          1.1 shell中運行 init 3  進入文本模式,同時會關閉相關的服務(Xserver 肯定關閉)
          1.2 Alt+Ctrl+F1~F6到字符界面,root登陸,ps aux|grep /usr/X11R6/bin/X,得到X進程號,
          kill -9 進程號,其實這時已經到文本界面了,沒必要關X。(這樣太粗魯了)
          2.如果你想一開機后不進入X Window:
          編輯/etc/inittab
          vi /etc/inittab
          id:5:initdefault:改成
          id:3:initdefault:
          :x 文件保存
          :q 退出VI
          3.在文本模式打開圖形界面(X window):
          在shell中輸入:startx 或者 init 5
                1.進入字符界面
            為了在Linux啟動時直接進入Console界面,我們可以編輯/etc/inittab文件。找到id:5: initdefault:這一行,將它改為id:3:initdefault:后重新啟動系統即可。我們看到,簡簡單單地將5改為3,就能實現啟動時進入X-window圖形操作界面或Console字符界面的轉換,這是因為Linux操作系統有六種不同的運行級(run level),在不同的運行級下,系統有著不同的狀態,這六種運行級分別為:
            0:停機(記住不要把initdefault 設置為0,因為這樣會使Linux無法啟動 )
            1:單用戶模式,就像Win9X下的安全模式。
            2:多用戶,但是沒有 NFS 。
            3:完全多用戶模式,標準的運行級。
            4:一般不用,在一些特殊情況下可以用它來做一些事情。
            5:X11,即進到 X-window 系統。
            6:重新啟動 (記住不要把initdefault 設置為6,因為這樣會使Linux不斷地重新啟動)。
            其中運行級3就是我們要進入的標準Console字符界面模式。
            2.自由轉換字符界面和X-window圖形界面
            在了解了啟動自動進入X-window圖形操作界面和Console字符操作界面的轉換后,也許你會想,這兩種操作界面各有各的好處,我能不能“貪心”一點,同時擁有這兩種操作界面呢?在無所不能的Linux操作系統中,這個要求當然是可以得到滿足的。
            在X-window圖形操作界面中按“Alt+Ctrl+功能鍵Fn n=1~6 ”就可以進入Console字符操作界面。這就意味著你可以同時擁有X-window加上6個Console字符操作界面,這是一件多么令人振奮的事情啊!
            在Console字符操作界面里如何回到剛才的X-window中呢?很簡單,按“Alt+Ctrl+F7”即可。這時Linux默認打開7個屏幕,編號為tty1~tty7。X-window啟動后,占用的是tty7號屏幕,tty1~tty6仍為字符界面屏幕。也就是說,用“Alt+Ctrl+Fn”組合鍵即可實現字符界面與X window界面的快速切換。
          Linux的老用戶們都知道,X-window是一個非常方便地圖形界面,它能使用戶用鼠標最簡單的進行操作,但是它也有不少缺點:比如啟動和運行速度慢、穩定性不夠、兼容性差、容易崩潰等。但是一旦X-window系統出了問題,并不會使整個Linux系統的崩潰而導致數據丟失或系統損壞,因為當X-window由于自身或應用程序而失去響應或崩潰時,我們可以非常方便地退出X-window進入Console進行故障處理,要做的只是按“Alt+Ctrl+Backspace”鍵,這意味著只要系統沒有失去對鍵盤的響應,X-window出了任何問題,都可以方便地退出。
          posted @ 2013-06-15 13:29 Eric_jiang 閱讀(407) | 評論 (0)編輯 收藏

          Android is a Linux-based operating system designed primarily for touchscreen mobile devices such as smartphones and tablet computers, developed by Google in conjunction with the Open Handset Alliance. The Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language. Apache log4j is a logging library for Java and an Apache Software Foundation Project and developed by a dedicated team of Committers of the Apache Software Foundation. Here we will explain how to integrate Log4J in Android based Java applications.

          Step 1

          Download Log4J library from http://logging.apache.org/log4j/1.2/download.html

          Step 2

          Configuring Log4J library the normal way - using XML configuration file - can't be used in Android based Java application as the configuration classes of Log4J use beans from the package "java.beans" (e.g. PropertyDescriptor). Not all classes of this package are supported in Android, so using Log4J directly in Android Java application will case exceptions like the following one to be thrown:

          11-23 09:44:56.947: D/dalvikvm(1585): GC_FOR_MALLOC freed 3278 objects / 311568 bytes in 31ms
          rejecting opcode 0x21 at 0x000a
          rejected Lorg/apache/log4j/config/PropertySetter;.getPropertyDescriptor
          (Ljava/lang/String;)Ljava/beans/PropertyDescriptor;
          Verifier rejected class Lorg/apache/log4j/config/PropertySetter;
          Exception Ljava/lang/VerifyError; thrown during Lorg/apache/log4j/LogManager;.
          Shutting down VM
          threadid=1: thread exiting with uncaught exception (group=0x400259f8)
          FATAL EXCEPTION: main
          java.lang.ExceptionInInitializerError
          at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:64)
          at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:253)
          at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:265)
          ...
          Caused by: java.lang.VerifyError: org.apache.log4j.config.PropertySetter
          at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:772)
          at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:735)
          at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:615)
          at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:502)
          at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:547)
          at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:483)
          at org.apache.log4j.LogManager.(LogManager.java:127)
          ... 20 more

          There is a project called android-logging-log4j, which provides a convenient way to configure the log4j system properly.

          Download "Android Logging Log4J" library from http://code.google.com/p/android-logging-log4j/downloads/list

          Step 3

          Add Both libraries "log4j" and "android-logging-log4j" to your application libraries

          Step 4

          In order to log to a file on the external storage, the following permission needs to be placed in AndroidManifest.xml

          1. <uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" />

          Step 5

          In your application Main class:

          1. package com.android.myapp ;
          2.  
          3. import java.io.File ;
          4.  
          5. import org.apache.log4j.Level ;
          6. import org.apache.log4j.Logger ;
          7.  
          8. import android.app.Application ;
          9. import android.os.Environment ;
          10. import de.mindpipe.android.logging.log4j.LogConfigurator ;
          11.  
          12. public class MyApplication extends Application {
          13.         @Override
          14.         public void onCreate ( ) {
          15.                 super . onCreate ( ) ;
          16.                 LogConfigurator logConfigurator = new LogConfigurator ( ) ;
          17.                 logConfigurator. setFileName ( Environment . getExternalStorageDirectory ( )
          18.                                 + File . separator + "MyApp" + File . separator + "logs"
          19.                                 + File . separator + "log4j.txt" ) ;
          20.                 logConfigurator. setRootLevel ( Level. DEBUG ) ;
          21.                 logConfigurator. setLevel ( "org.apache" , Level. ERROR ) ;
          22.                 logConfigurator. setFilePattern ( "%d %-5p [%c{2}]-[%L] %m%n" ) ;
          23.                 logConfigurator. setMaxFileSize ( 1024 * 1024 * 5 ) ;
          24.                 logConfigurator. setImmediateFlush ( true ) ;
          25.                 logConfigurator. configure ( ) ;
          26.                 Logger log = Logger. getLogger ( MyApplication. class ) ;
          27.                 log. info ( "My Application Created" ) ;
          28.         }
          29. }

          Now you will have log4j configured to log to Path: (Environment.getExternalStorageDirectory() + File.separator + "MyApp" + File.separator + "logs" + File.separator + "log4j.txt") with DEBUG level and ERROR lever for "org.apache" package with file pattern "%d %-5p [%c{2}]-[%L] %m%n" and other configuration parameters

          posted @ 2013-06-07 14:02 Eric_jiang 閱讀(520) | 評論 (0)編輯 收藏

          安裝Apache SOAP
            下載需要的資源:
             Apache SOAP 2.3 http://apache.linuxforum.net/dist/ws/soap/version-2.3.1/soa
          p-bin-2.3.1.zip
             mail.jar from JavaMail http://java.sun.com/products/javamail
             activation.jar from JavaBeans Activation Framework http://java.sun.com/prod
          ucts/beans/glasgow/jaf.html
             a JAXP compatible, namespace-aware XML parser such as Apache Xerces (v1.1.2
           or later) http://xml.apache.org/xerces-j
             Tomcat 4.1.x http://jakarta.apache.org/tomcat
             安裝tomcat:
                網上很多介紹的文章,這里不再贅述。
             安裝Apache SOAP:
                把下載回來的soap-2.3.1.zip解壓到c:\soap-2_3_1。把c:\soap-2_3_1\lib下的兩
          個文件復制到%TOMCAT_HOME%\common\lib下面;把c:\soap-2_3_1\webapps下的soap.war
          復制到%TOMCAT_HOME%\webapps下面;把其他的幾個jar文件(mail.jar,activation.jar,x
          erces.jar)復制到%TOMCAT_HOME%\common\lib下面。
             設置classpath變量:
                把上面的四個jar文件路徑添加到classpath變量中
                %TOMCAT_HOME%\common\lib\soap.jar
                %TOMCAT_HOME%\common\lib\mail.jar
                %TOMCAT_HOME%\common\lib\activation.jar
                %TOMCAT_HOME%\common\lib\xerces.jar
                PS:我的做法是把這四個jar文件合成一個soap-all.jar文件,并不路徑添加到clas
          spath中去,這樣省點事。
             測試客戶端配置:
                1.打開web瀏覽器,訪問http://127.0.0.1:8080/soap/servlet/rpcrouter,如果出
          現提示: “Sorry, I don't speak via HTTP GET- you have to use HTTP POST to tal
          k to me”,第一步測試通過。
                2.命令行測試:在命令行下輸入下面命令 
                  >java org.apache.soap.server.ServiceManagerClient http://127.0.0.1:808
          0/soap/servlet/rpcrouter list
                  如果輸出只是"Deployed Services:",沒有得到其他任何輸出信息,否則請檢查
          classpath配置是否正確
          運行HelloWorldService服務
             HelloWorldService.java
             __________________________________   
               public class HelloWorldService
              {
                String getMessage()
                 {
                  return "Hello World!";
                 }
              }
             _________________________________
             創建部署描述符:
             部署描述符其實就是一個xml文件。當SOAP請求被發送給org.apache.soap.server.htt
          p.RPCRouterServlet時,RPCRouterServlet使用部署描述符來決定把請求路由至何處。下
          面將敘述用Apache SOAP的命令行工具注冊服務。
             HelloWorld.xml
             ---------------------------------
             <?xml version="1.0"?>
              <isd:service xmlns:isd="     <isd:provider type="java" scope="Request" methods="getMessage">
               <isd:java class="HelloWorldService" static="false"/>
               </isd:provider>
             </isd:service>
             ---------------------------------
             注冊服務:
             在命令行下輸入(注意要在HelloWorldService.xml文件所在目錄下)
             > java org.apache.soap.server.ServiceManagerClient
          http://127.0.0.1:8080/so
          ap/servlet/rpcrouter deploy HelloWorld.xml
             如果沒有錯誤提示則注冊成功,可以用下面的幾個命令來查看已經注冊的服務
             > java org.apache.soap.server.ServiceManagerClient http://127.0.0.1:8080/so
          ap/servlet/rpcrouter list
             出現提示“Deployed Services: urn:HelloWorldService”
             注銷服務:
             > java org.apache.soap.server.ServiceManagerClient http://127.0.0.1:8080/so
          ap/servlet/rpcrouter undelpoy "urn:HelloWorldService"
             還可以查詢服務屬性:
             > java org.apache.soap.server.ServiceManagerClient http://127.0.0.1:8080/so
          ap/servlet/rpcrouter query "urn:HelloWorldService"
            HelloWorld服務客戶端
            HelloWorldClient.java
            _______________________
          import org.apache.soap.Constants;
          import java.net.URL;
          import org.apache.soap.Fault;
          import org.apache.soap.rpc.Call;
          import org.apache.soap.rpc.Response;
          import org.apache.soap.rpc.Parameter;

          public class HelloWorldClient {
            static String DEFAULT_ENDPOINT = "http://localhost:8080/soap/servlet/rpcrout
          er";

            public static void main(String args[]) throws Exception {

              String endPoint = DEFAULT_ENDPOINT;

              //Process Arguments
              if (args.length == 1)
                endPoint = args[0];
              else if (args.length > 1)
                System.out.println("java HelloWorldClient [endpoint]");

                // Build the SOAP RPC request message using the Call object
                Call call = new Call();
                call.setTargetObjectURI("urn:HelloWorldService");
                call.setMethodName("getMessage");
                call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);

                // Create a URL object, which represents the endpoint
                URL url = new URL(endPoint);

                // Send the SOAP RPC request message using invoke() method
                Response resp = call.invoke(url, "");

                // Check the response.
                if (resp.generatedFault()) { // Error Occured
                  Fault fault = resp.getFault();
                  System.out.println("The Following Error Occured: ");
                  System.out.println("  Fault Code   = " + fault.getFaultCode());  
                  System.out.println("  Fault String = " + fault.getFaultString());
                } else { // Completed Successfully
                  Parameter result = resp.getReturnValue();
                  System.out.println(result.getValue());
                }
            }
          }
          -----------------------------------------------
               運行服務:
               首先把HelloWorldService.class打包成jar文件放到%tomcat_home%/common/lib或者
          直接把HelloWorldService.class放到%tomcat_home%/common/classes下
               按照上面講的方法注冊服務,然后運行HelloWorldClient,屏幕輸出"HelloWorld!"

           

          posted @ 2013-05-31 11:03 Eric_jiang 閱讀(238) | 評論 (0)編輯 收藏

          點擊圖片查看8地市120家大米鎘含量超標名單

          (通訊員粵食安)今年4月,廣東省組織省開展了大米質量安全摸查工作,摸查結果日前已經向社會公布。廣東省各地食品安全監管部門也加強了對轄區內大米生產、流通、餐飲等環節大米進行抽檢。截至5月22日,省食安辦共收到10個地市上報大米鎘含量抽檢數據,其中廣州等8個地市有不合格批次,茂名、潮州等2個地市全部合格。現將大米鎘含量抽檢不合格名單予以公布。

          在不合格名單中,超標最嚴重的是由清遠市清城區石角糧食管理所糧食加工廠生產的連州油粘米,超標將近6倍,每公斤達含鎘量達1.12毫克(標準值為不超過0.2毫克。)

          省食安辦要求各地對抽檢中發現的問題及時追蹤,對不合格大米就地封存,切實做好后續處置工作,依法從嚴查處糧食質量安全案件,嚴厲打擊糧食質量安全違法犯罪行為。

          附:

          鎘大米名單第二批120批次

          鎘大米名單第一批39批次

          posted @ 2013-05-23 22:33 Eric_jiang 閱讀(174) | 評論 (0)編輯 收藏

          讀屬性文件
          Properties prop = new Properties();
          InputStream in = getClass().getResourceAsStream("/IcisReport.properties");
          prop.load(in);
          Set keyValue = prop.keySet();
          for (Iterator it = keyValue.iterator(); it.hasNext();)
          {
          String key = (String) it.next();
          }
          ------------------------
          outputFile = new FileOutputStream(fileName);
          propertie.store(outputFile, description);
          outputFile.close();
          -----------------------------------------------------------------------------------------
          Class.getResourceAsStream ("/some/pkg/resource.properties");
          ClassLoader.getResourceAsStream ("some/pkg/resource.properties");
          java.util.ResourceBundle rs = java.util.ResourceBundle.getBundle("some.pkg.resource");
          rs.getString("xiaofei");
          -----------------------------------------------------------------------------------------
          寫屬性文件
          Configuration saveCf = new Configuration();
          saveCf.setValue("min", "10");
          saveCf.setValue("max", "1000");
          saveCf.saveFile(".\config\save.perperties","test");

          總結:java的properties文件需要放到classpath下面,這樣程序才能讀取到,有關classpath實際上就是java類或者庫的存放路徑,在java工程中,properties放到

          class文件一塊。在web應用中,最簡單的方法是放到web應用的WEB- INF\classes目錄下即可,也可以放在其他文件夾下面,這時候需要在設置classpath環境變量的

          時候,將這個文件夾路徑加到 classpath變量中,這樣也也可以讀取到。在此,你需要對classpath有個深刻理解,classpath絕非系統中刻意設定的那個系統環境變


          量,WEB-INF\classes其實也是,java工程的class文件目錄也是。

          發個例子大家自己看哈.
          package control;

          import java.io.BufferedInputStream;
          import java.io.FileInputStream;
          import java.io.FileOutputStream;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.OutputStream;
          import java.util.Enumeration;
          import java.util.Properties;

          public class TestMain {
           
           //根據key讀取value
           public static String readValue(String filePath,String key) {
            Properties props = new Properties();
                  try {
                   InputStream in = new BufferedInputStream (new FileInputStream(filePath));
                   props.load(in);
                   String value = props.getProperty (key);
                      System.out.println(key+value);
                      return value;
                  } catch (Exception e) {
                   e.printStackTrace();
                   return null;
                  }
           }
           
           //讀取properties的全部信息
              public static void readProperties(String filePath) {
               Properties props = new Properties();
                  try {
                   InputStream in = new BufferedInputStream (new FileInputStream(filePath));
                   props.load(in);
                      Enumeration en = props.propertyNames();
                       while (en.hasMoreElements()) {
                        String key = (String) en.nextElement();
                              String Property = props.getProperty (key);
                              System.out.println(key+Property);
                          }
                  } catch (Exception e) {
                   e.printStackTrace();
                  }
              }

              //寫入properties信息
              public static void writeProperties(String filePath,String parameterName,String parameterValue) {
               Properties prop = new Properties();
               try {
                InputStream fis = new FileInputStream(filePath);
                      //從輸入流中讀取屬性列表(鍵和元素對)
                      prop.load(fis);
                      //調用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。
                      //強制要求為屬性的鍵和值使用字符串。返回值是 Hashtable 調用 put 的結果。
                      OutputStream fos = new FileOutputStream(filePath);
                      prop.setProperty(parameterName, parameterValue);
                      //以適合使用 load 方法加載到 Properties 表中的格式,
                      //將此 Properties 表中的屬性列表(鍵和元素對)寫入輸出流
                      prop.store(fos, "Update '" + parameterName + "' value");
                  } catch (IOException e) {
                   System.err.println("Visit "+filePath+" for updating "+parameterName+" value error");
                  }
              }

              public static void main(String[] args) {
               readValue("info.properties","url");
                  writeProperties("info.properties","age","21");
                  readProperties("info.properties" );
                  System.out.println("OK");
              }


           發個例子大家自己看哈.

          package control;

          import java.io.BufferedInputStream;
          import java.io.FileInputStream;
          import java.io.FileOutputStream;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.OutputStream;
          import java.util.Enumeration;
          import java.util.Properties;

          public class TestMain {
           
           //根據key讀取value
           public static String readValue(String filePath,String key) {
            Properties props = new Properties();
                  try {
                   InputStream in = new BufferedInputStream (new FileInputStream(filePath));
                   props.load(in);
                   String value = props.getProperty (key);
                      System.out.println(key+value);
                      return value;
                  } catch (Exception e) {
                   e.printStackTrace();
                   return null;
                  }
           }
           
           //讀取properties的全部信息
              public static void readProperties(String filePath) {
               Properties props = new Properties();
                  try {
                   InputStream in = new BufferedInputStream (new FileInputStream(filePath));
                   props.load(in);
                      Enumeration en = props.propertyNames();
                       while (en.hasMoreElements()) {
                        String key = (String) en.nextElement();
                              String Property = props.getProperty (key);
                              System.out.println(key+Property);
                          }
                  } catch (Exception e) {
                   e.printStackTrace();
                  }
              }

              //寫入properties信息
              public static void writeProperties(String filePath,String parameterName,String parameterValue) {
               Properties prop = new Properties();
               try {
                InputStream fis = new FileInputStream(filePath);
                      //從輸入流中讀取屬性列表(鍵和元素對)
                      prop.load(fis);
                      //調用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。
                      //強制要求為屬性的鍵和值使用字符串。返回值是 Hashtable 調用 put 的結果。
                      OutputStream fos = new FileOutputStream(filePath);
                      prop.setProperty(parameterName, parameterValue);
                      //以適合使用 load 方法加載到 Properties 表中的格式,
                      //將此 Properties 表中的屬性列表(鍵和元素對)寫入輸出流
                      prop.store(fos, "Update '" + parameterName + "' value");
                  } catch (IOException e) {
                   System.err.println("Visit "+filePath+" for updating "+parameterName+" value error");
                  }
              }

              public static void main(String[] args) {
               readValue("info.properties","url");
                  writeProperties("info.properties","age","21");
                  readProperties("info.properties" );
                  System.out.println("OK");
              }
          }
          posted @ 2013-05-17 09:51 Eric_jiang 閱讀(210) | 評論 (0)編輯 收藏

              電線的規格在國際上常用的有三個標準:分別是美制(AWG)、英制(SWG)和我們的(CWG)。
              幾平方是國家標準規定的的一個標稱值,幾平方是用戶根據電線電纜的負荷來選擇電線電纜。
              電線平方數是裝修水電施工中的一個口頭用語,常說的幾平方電線是沒加單位,即平方毫米。
              電線的平方實際上標的是電線的橫截面積,即電線圓形橫截面的面積,單位為平方毫米。
              一般來說,經驗載電量是當電網電壓是220V時候,每平方電線的經驗載電量是一千瓦左右。
              銅線每個平方可以載電1-1.5千瓦,鋁線每個平方可載電0.6-1千瓦。因此功率為1千瓦的電器只需用一平方的銅線就足夠了。
              具體到電流,短距送電時一般銅線每平方可載3A到5A的電流。散熱條件好取5A/平方毫米,不好取3A/平方毫米。
          換算方法:
              知道電線的平方,計算電線的半徑用求圓形面積的公式計算:
              電線平方數(平方毫米)=圓周率(3.14)×電線半徑(毫米)的平方
              知道電線的平方,計算線直徑也是這樣,如:
              2.5方電線的線直徑是:2.5÷ 3.14 = 0.8,再開方得出0.9毫米,因此2.5方線的線直徑是:2×0.9毫米=1.8毫米。
          知道電線的直徑,計算電線的平方也用求圓形面積的公式來計算:
              電線的平方=圓周率(3.14)×線直徑的平方/4
              電纜大小也用平方標稱,多股線就是每根導線截面積之和。
          電纜截面積的計算公式:
              0.7854 × 電線半徑(毫米)的平方 × 股數
              如48股(每股電線半徑0.2毫米)1.5平方的線:
              0.785 ×(0.2 × 0.2)× 48 = 1.5平方

           (國標1.5平方 導體直徑1.38 BV 塑銅線 ## BLV 塑鋁線)
          (國標2.5平方 導體直徑1.78 BV 塑銅線 ## BLV 塑鋁線)
          (國標4平方 導體直徑2.25 BV 塑銅線 ## BLV 塑鋁線)
          (國標6平方 導體直徑2.76 BV 塑銅線 ## BLV 塑鋁線)
          (國標10平方 導體直徑1.33*7 BV 塑銅線 ## BLV 塑鋁線)
          (國標16平方 導體直徑170*7 BV 塑銅線 ## BLV 塑鋁線)
          (國標25平方 導體直徑210*7 BV 塑銅線 ## BLV 塑鋁線)
          (國標35平方 導體直徑250*7 BV 塑銅線 ## BLV 塑鋁線)
          (國標50平方 導體直徑178*19 BV 塑銅線 ## BLV 塑鋁線)
          (國標70平方 導體直徑210*19 BV 塑銅線 ## BLV 塑鋁線)
          ( 國標95平方 導體直徑250*19BV 塑銅線 ## BLV 塑鋁線)

          25℃時銅線的載流量是
              1mm     15A
              1.5      18A
              2.5      26A
              4       38A
              6       44A
              10      68A
              16      80A
              25       109A
              35       125A
              50       163A
              70       202A
              95       243A
              120       285A
              150       320A



          如果是銅芯線: 
          1.5平方最大可承載12A——13.5A
          2.5平方最大可承載16A——18A
          4平方最大可承載32A——36A
          6平方最大可承載48A——54A

          如果是鋁芯線: 
          1.5平方最大可承載6A——6.75A
          2.5平方最大可承載8A——9A
          4平方最大可承載16A——18A
          6平方最大可承載24A——27A

          1.5P空調器的制冷量是3300W,按能效比2.8計,電功率約1178W,工作電流約5.4A。單相電機的啟動電流是工作電流的5-7倍,即啟動電流為32A左右,持續時間不長。兩臺空調器同時啟動,瞬間電流可以達到65A左右。


          電線多少平方,指的是電線導體的截面積。 能一眼看出來的,是憑經驗,目測。 6mm^2的直徑是1.38mm;4mm^2的直徑是1.13mm;2.5mm^2的直徑是0.89mm
          posted @ 2013-05-17 09:18 Eric_jiang 閱讀(217) | 評論 (0)編輯 收藏

          1廣東省博物館(APM線歌劇院)
          2農講所紀念館(1號線農講所)
          3黃埔軍校舊址紀念館 (5號線魚珠站,下車后還有1.4公里才到目的地)
          4三元里抗英斗爭紀念館(2號線三元里B出口)
          5廣州起義紀念館(1或2號線公園前J出口)
          6 "三.二九”起義指揮部舊址紀念館(1號線農講所D出口)
          7陳樹人紀念館(1號線東山口A出口)
          8高劍父紀念館(2號線越秀公園E出口)
          9東征烈士陵園
          10詹天佑紀念館(1號線黃沙B出口)
          11天河區博物館
          12番禺博物館
          13冼星海紀念館
          14花都區博物館
          15從化市博物館
          16增城市博物館
          17東風公園(3號線林和西C出口,下車后還有1.3公里)
          18云溪生態公園
          19廣州兒童公園
          20人民公園(1號線公園前H出口)
          21海珠廣場(2號線海珠廣場)
          22莊頭公園(8號線沙園站,下車后還有1.3公里)
          23海印公園
          24磨碟沙公園(8號線赤崗站D2出口,下車后還有1.2公里)
          25增埗公園(5號線西村站D出口,下車后還有1公里)
          26醉觀公園(1號線芳村站C出口)
          27青年公園(5號線中山八站D出口)
          28沙面公園(1號線黃沙站D出口)
          29大夫山森林公園
          30芙蓉旅游度假區(花都)
          31九龍湖社區(花都) 
          32花果山公園(花都) 
          33蘿崗香雪公園
          34義務植樹園
          35鳳凰山公園
          36湖心島
          37中山紀念堂(主體建筑和陳列館除外)(2號線紀念堂D2出口)
          38東平大押(1號線農講所B出口)
          1越秀公園(2號線越秀公園站)
          2流花湖公園
          3文化公園
          4黃花崗公園(5號線區莊站E出口)
          5廣州起義烈士陵園(1號線烈士陵園站)
          6珠江公園(5號線獵德C出口)
          7雕塑公園
          8聚芳園
          9星海園
          10東山湖公園
          11三元里抗英斗爭紀念公園(2號線三元里站A1出口)
          12荔灣湖公園(5號線中山八站D出口) 
          13雙橋公園(5號線坦尾G出口)
          14天河公園
          15曉港公園(8號線曉港站D出口)
          16聚龍山森林公園
          17火爐山森林公園
          18龍眼洞森林公園
          19鳳凰山森林公園
          20龍頭山森林公園
          21金坑森林公園
          22白蘭花森林公園
          23大夫山森林公園 (番禺區)
          24滴水巖森林公園 (番禺區)
          25十八羅漢森林公園(番禺區)
          26黃山魯森林公園 (南沙區)
          27九龍潭森林公園 (花都區 )
          28風云嶺森林公園 (從化市)
          29蕉石嶺森林公園 (增城市)
          30南香山森林公園 (增城市)
          31中新森林公園 (增城市)
          32白洞森林公園 (增城市)
          33陳李濟中藥博物館(2號線南洲站C出口,下車后還有1.5公里)
          34廣東中醫藥博物館
          35"神農草堂"中醫藥博物館(3號線同和站C出口,下車后還有2.1公里)
          36美容化妝品博物館
          1廣東革命歷史博物館(越秀區)(1或2號線公園前J出口)
          2中華全國總工會舊址紀念館(越秀區)
          3 中共三大會址紀念館(越秀區)(1號線東山口站A出口)
          4廣州藝術博物院(越秀區)(5號線小北D出口)
          5廣州發展公園 (越秀區)
          6花果山公園(越秀區)
          7潘鶴雕塑藝術園(海珠區)(2號線江泰路站D出口,下車后還有2.1公里)
          8孫中山大元帥府舊址紀念館(海珠區)
          9洪秀全紀念館(花都區)
          10荔枝灣涌(1號線長壽路B出口/5號線中山八站B出口)
          11廣州城隍廟(1號線公園前E出口)
          12魯迅紀念館(1號線農講所C出口) (目前正在修葺,6月對外開放)
          13魯迅紀念公園(1號線烈士陵園站B3出口)

           

           

          posted @ 2013-05-10 10:58 Eric_jiang 閱讀(329) | 評論 (1)編輯 收藏

          什么是SSH隧道
          首先看下面這張圖,我們所面臨的大部分情況都和它類似。我們的電腦在右上角,通過公司帶有防火墻功能的路由器接入互聯網(當然可能還有交換機什么的在中間連接著你和路由器,但是在我們的問題中交換機并不起到什么關鍵性的作用)。右下腳的部分是一個網站的服務器,它是我們公司防火墻策略的一部分,也就是說公司不希望我們訪問這個服務器。在右上角還有一臺機器,它也是屬于我們的。但是這臺機器并不在我們公司里面,換句話說他不受到公司防火墻的限制。最后也是最重要的一點是,我們能夠在公司通過互聯網直接訪問這臺機器。或者說這臺位于公司防火墻外面的機器需要擁有一個獨立的互聯網IP,同時公司的防火墻規則不會屏蔽這臺機器,并且這臺機器運行著一個OpenSSH服務器。
          如何使用ssh建立隧道(轉載) - Search - Search的博客



          現在,我們清楚地知道了自己所處的網絡環境。并且不難理解我們在公司無法訪問那個服務器的原因是:線路A-B-C上A-B之間的防火墻屏蔽了對那個服務器的訪問。與此同時,我們也很快注意到,線路A-B-D之間、D-C之間是不受阻礙的。相信你已經想到了,在A-B之間的防火墻不會屏蔽對機器d的訪問。因此我們可以通過機器d建立一個通道A-B-D-C,從而訪問到機器c上的數據。

          這條通道可以用很多技術來建立,這里我們僅僅介紹如何使用SSH服務器來建立這樣一個通道-他被稱為SSH隧道。

          如何建立本地SSH隧道
          在我們計劃建立一個本地SSH隧道之前,我們必須清楚下面這些數據:

          中間服務器d的IP地址
          要訪問服務器c的IP地址
          要訪問服務器c的端口
          現在,我們把上面這張圖變得具體一些,給這些機器加上IP地址。并且根據下面這張圖列出我們的計劃:
          如何使用ssh建立隧道(轉載) - Search - Search的博客



          需要訪問234.234.234.234的FTP服務,也就是端口21
          中間服務器是123.123.123.123
          現在我們使用下面這條命令來達成我們的目的

          ssh -N -f -L 2121:234.234.234.234:21 123.123.123.123
          ftp localhost:2121 # 現在訪問本地2121端口,就能連接234.234.234.234的21端口了
          這里我們用到了SSH客戶端的三個參數,下面我們一一做出解釋:

          -N 告訴SSH客戶端,這個連接不需要執行任何命令。僅僅做端口轉發
          -f 告訴SSH客戶端在后臺運行
          -L 做本地映射端口,被冒號分割的三個部分含義分別是
          需要使用的本地端口號
          需要訪問的目標機器IP地址(IP: 234.234.234.234)
          需要訪問的目標機器端口(端口: 21)
          最后一個參數是我們用來建立隧道的中間機器的IP地址(IP: 123.123.123.123)
          我們再重復一下-L參數的行為。-L X:Y:Z的含義是,將IP為Y的機器的Z端口通過中間服務器映射到本地機器的X端口。

          在這條命令成功執行之后,我們已經具有繞過公司防火墻的能力,并且成功訪問到了我們喜歡的一個FTP服務器了。

          如何建立遠程SSH隧道
          通過建立本地SSH隧道,我們成功地繞過防火墻開始下載FTP上的資源了。那么當我們在家里的時候想要察看下載進度怎么辦呢?大多數公司的網絡是通過路由器接入互聯網的,公司內部的機器不會直接與互聯網連接,也就是不能通過互聯網直接訪問。通過線路D-B-A訪問公司里的機器a便是不可能的。也許你已經注意到了,雖然D-B-A這個方向的連接不通,但是A-B-D這個方向的連接是沒有問題的。那么,我們能否利用一條已經連接好的A-B-D方向的連接來完成D-B-A方向的訪問呢?答案是肯定的,這就是遠程SSH隧道的用途。

          與本地SSH一樣,我們在建立遠程SSH隧道之前要清楚下面幾個參數:

          需要訪問內部機器的遠程機器的IP地址(這里是123.123.123.123)
          需要讓遠程機器能訪問的內部機器的IP地址(這里因為是想把本機映射出去,因此IP是127.0.0.1)
          需要讓遠程機器能訪問的內部機器的端口號(端口:22)
          在清楚了上面的參數后,我們使用下面的命令來建立一個遠程SSH隧道

          ssh -N -f -R 2222:127.0.0.1:22 123.123.123.123
          現在,在IP是123.123.123.123的機器上我們用下面的命令就可以登陸公司的IP是192.168.0.100的機器了。

          ssh -p 2222 localhost
          -N,-f 這兩個參數我們已經在本地SSH隧道中介紹過了。我們現在重點說說參數-R。該參數的三個部分的含義分別是:

          遠程機器使用的端口(2222)
          需要映射的內部機器的IP地址(127.0.0.1)
          需要映射的內部機器的端口(22)
          例如:-R X:Y:Z 就是把我們內部的Y機器的Z端口映射到遠程機器的X端口上。

          建立SSH隧道的幾個技巧
          自動重連

          隧道可能因為某些原因斷開,例如:機器重啟,長時間沒有數據通信而被路由器切斷等等。因此我們可以用程序控制隧道的重新連接,例如一個簡單的循環或者使用 djb’s daemontools . 不管用哪種方法,重連時都應避免因輸入密碼而卡死程序。關于如何安全的避免輸入密碼的方法,請參考我的 如何實現安全的免密碼ssh登錄 。這里請注意,如果通過其他程序控制隧道連接,應當避免將SSH客戶端放到后臺執行,也就是去掉-f參數。

          保持長時間連接

          有些路由器會把長時間沒有通信的連接斷開。SSH客戶端的TCPKeepAlive選項可以避免這個問題的發生,默認情況下它是被開啟的。如果它被關閉了,可以在ssh的命令上加上-o TCPKeepAlive=yes來開啟。

          另一種方法是,去掉-N參數,加入一個定期能產生輸出的命令。例如: top或者vmstat。下面給出一個這種方法的例子:

          ssh -R 2222:localhost:22 123.123.123.123 "vmstat 30"
          檢查隧道狀態

          有些時候隧道會因為一些原因通信不暢而卡死,例如:由于傳輸數據量太大,被路由器帶入stalled狀態。這種時候,往往SSH客戶端并不退出,而是卡死在那里。一種應對方法是,使用SSH客戶端的ServerAliveInterval和ServerAliveCountMax選項。ServerAliveInterval會在隧道無通信后的一段設置好的時間后發送一個請求給服務器要求服務器響應。如果服務器在ServerAliveCountMax次請求后都沒能響應,那么SSH客戶端就自動斷開連接并退出,將控制權交給你的監控程序。這兩個選項的設置方法分別是在ssh時加入-o ServerAliveInterval=n和-o ServerAliveCountMax=m。其中n, m可以自行定義。

          如何將端口綁定到外部地址上

          使用上面的方法,映射的端口只能綁定在127.0.0.1這個接口上。也就是說,只能被本機自己訪問到。如何才能讓其他機器訪問這個端口呢?我們可以把這個映射的端口綁定在0.0.0.0的接口上,方法是加上參數-b 0.0.0.0。同時還需要打開SSH服務器端的一個選項-GatewayPorts。默認情況下它應當是被打開的。如果被關閉的話,可以在/etc/sshd_config中修改GatewayPorts no為GatewayPorts yes來打開它。

          如何尋找中間服務器

          如果你家里使用ADSL上網,多半你會比較幸運。一般的ADSL(例如 聯通 的ADSL)都是有互聯網地址的。你只需要在家里的路由器上一臺裝有OpenSSH server機器的SSH端口映射出去即可。同時一些提供SSH訪問的虛擬主機也可以用于這一用途。例如: Hostmonser 或者 Dreamhost .

          通過SSH隧道建立SOCKS服務器
          如果我們需要借助一臺中間服務器訪問很多資源,一個個映射顯然不是高明的辦法(事實上,高明確實沒有用這個方法)。幸好,SSH客戶端為我們提供了通過SSH隧道建立SOCKS服務器的功能。

          通過下面的命令我們可以建立一個通過123.123.123.123的SOCKS服務器。

          ssh -N -f -D 1080 123.123.123 # 將端口綁定在127.0.0.1上
          ssh -N -f -D 0.0.0.0:1080 123.123.123.123 # 將端口綁定在0.0.0.0上
          通過SSH建立的SOCKS服務器使用的是SOCKS5協議,在為應用程序設置SOCKS代理的時候要特別注意。

          總結
          至此,我們已經對如何利用SSH隧道有一個基本的認識了。現在,文章開始時的那些問題應該迎刃而解了吧。這里要特別說一下,由于SSH隧道也使用了SSH加密協議,因此是不會被防火墻上的內容過濾器監控到的。也就是說一切在隧道中傳輸的數據都是被加密的。當然,離開隧道后的數據還是會保持自己原有的樣子,沒有加密的數據還是會被后續的路由設備監控到。
          posted @ 2013-04-11 09:51 Eric_jiang 閱讀(553) | 評論 (1)編輯 收藏

          僅列出標題
          共57頁: First 上一頁 24 25 26 27 28 29 30 31 32 下一頁 Last 
          主站蜘蛛池模板: 扶余县| 大冶市| 昌江| 惠州市| 都兰县| 水富县| 平谷区| 察哈| 襄城县| 孟州市| 吉木萨尔县| 高安市| 新田县| 额敏县| 定兴县| 法库县| 苍溪县| 渑池县| 山东省| 平潭县| 塔河县| 绥江县| 新乐市| 黔江区| 德昌县| 嘉祥县| 曲水县| 云和县| 阿荣旗| 始兴县| 含山县| 桐梓县| 南皮县| 新蔡县| 长岛县| 西峡县| 西和县| 海伦市| 乌拉特前旗| 津市市| 嘉峪关市|