Pages

2016年9月6日 星期二

Oracle Linux 6.8 in USB loader

使用 unetbootin 或 Universal-USB-Installer 都可以把 Oracle Linux 6.8的iso檔案燒入到USB。但是在安裝過程時會出現

Missing ISO 9660 Image

The installer has tried to mount image #1, but cannot find it on the hard drive.
Please copy this image to the drive and click Retry.
Click Exit to abort the installation.


解決辦法:
在使用上述工具把檔案寫入到USB完成後,要再把.iso檔案放到USB的root folder(就是直接放到USB裡面不用放到任何資料夾中)。
如此重新安裝後就可以順利完成。

2015年9月23日 星期三

[android] record video

        在專案中要使用 android 的 camera 來實作錄影與拍照功能. 雖然網路上有許多範例但是還是會遇到一些問題.

以下是使用Camera 必備的 Activity 架構
public class MainActivity extends Activity implements SurfaceHolder.Callback{

    private SurfaceView surfaceview;
    private MediaRecorder mediarecorder;
    private SurfaceHolder surfaceHolder;
    private Button startButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ...
    }

    @Override
    protected void onResume(){
        camera = Camera.open();
        if (phoneConfigure.orientation == Configuration.ORIENTATION_PORTRAIT)
            camera.setDisplayOrientation(90);
        super.onResume();
    }
 
    @Override
    protected void onPause(){
        camera.stopPreview();
        camera.setPreviewCallback(null);
        camera.release();
        super.onPause();
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        // TODO Auto-generated method stub
       Camera.Parameters parameters = camera.getParameters();
       parameters.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO); 
  
       camera.setParameters(parameters);
       camera.startPreview();
    }
 
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
 
      // TODO Auto-generated method stub
      try {
  
          camera.setPreviewDisplay(surfaceHolder);
   
      } catch (IOException e) {
          // TODO Auto-generated catch block
          camera.release();
          camera = null;
          e.printStackTrace();
      }
    }
 
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
         // TODO Auto-generated method stub 
 
    }  

  
}

下面是錄影的相關重要程式碼

 public void startRecord(int videoWidth,int videoHeight){
 
 mediarecorder = new MediaRecorder();
  
 camera.stopPreview();  
 camera.unlock();
 mediarecorder.setCamera(camera);
 mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
 mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
 mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
 mediarecorder.setVideoSize(videoWidth,videoHeight);
 if (phoneConfigure.orientation == Configuration.ORIENTATION_PORTRAIT)
     mediarecorder.setOrientationHint(90);
 mediarecorder.setOutputFile(createVideoFilePath(fileExtention));
 mediarecorder.setPreviewDisplay(surfaceHolder.getSurface());
  
 try {
     mediarecorder.prepare();
     mediarecorder.start(); 
 }catch (Exception e) {
     mediarecorder.stop();
     mediarecorder.release();
     e.printStackTrace();
     toast(e.getCause().toString());
 }
 }

 public void stopRecord(){
     if (mediarecorder != null) {
         mediarecorder.stop();
         mediarecorder.release();
         mediarecorder = null;
     }
 }
完整相關程式碼: Github

2015年9月8日 星期二

[android] external sdcard path 取得

 20171215:更新多種其他android手機SD path路徑方式
在 android 4.4版本之後 無法任意存取sd card的位置, 只能寫入與存取自己app 下的資料夾
 /Android/Data/<app-packagename>/
  ex: (/Android/Data/com.example.myapp/)

先利用 getExternalFilesDir(null);
可以自動在內部儲存空間和SD card創立 /Android/Data/<app-packagename>/ 資料夾

因為每個手機的sdcard 路徑都會不同
利用 System.getenv("SECONDARY_STORAGE"); 來取得sd card 的路徑 (ex, /storage/sdcard1/) 最後sdcard的路徑就可以寫成
getExternalFilesDir(null);
String path = System.getenv("SECONDARY_STORAGE") + "/Android/Data/com.example.myapp/";
android 6.0 SD card path
 private String androidMarshmallowSDcardPath() {
  String rootPath = null;
  File f = new File("/storage");
  if (f.isDirectory()) {
   String[] s = f.list();
   for (int i = 0; i < s.length; i++) {
    if(s[i].matches(".*-+.*")) {
     rootPath ="/storage/" + s[i];
     break;
    }else if(s[i].matches("exfat_uuid")) {// SONY Z3 SD card path name
     rootPath ="/storage/" + s[i];
     break;
    }
   }
  }
  return rootPath;
 }
如果把SD card 格式化成內部儲存空間,例如 HTC M8手機以上有支援此功能
SDcardPath = "/storage/emulated/0/Android/data/com.example.myapp/";
//SONY Xperia Miro
if(android.os.Build.MODEL.matches(".*ST23a+.*")) {
     SDcardPath = "/mnt/ext_card" +"/Android/data/com.phison.sdcardtest/";
}
相關permission
<uses-permission android:name="android.permissions.WRITE_EXTERNAL_STORAGE" />

2014年4月3日 星期四

ANDSF

ANDSF 全名為 Access Network Discovery and Selection Function,位於 EPC 系統中。可以幫UE 在 3GPP 與 non 3GPP(WiMax,Wi-Fi) 的網路 找出最好的連線品質,進行連線。也可以訂定不同的策略依照不同需求,進行offload動作。
這次要做的計畫內容,就是要針對UE做offload。
ANDSF主要架構如下:
  

  ANDSF 與 UE溝通的介面為S14 其大致的架構如下:

 

ISMP - 當UE在同一個時間只能連上一種網路(LAN or Cellular 網路)時,ANDSF會根據哪個網路負載量較少,而建議UE連上此網路
ISRP - 當UE在同一個時間可以連上多種網路(LAN or Cellular 網路)時,ANDSF 會根據不同應用程式的應用走不同路線
IARP - 可以根據所接受到的 IARP 路由策略以及 UE 的偏好設定來為某限定的IP flow選擇路由路徑, 該路由路徑必須是現有的active IP interface並且連結到一個指定的APN(3G和網際網路之間的gateway)
Discovery information - 找尋UE附近可以連上網路的訊息
Rule Selection Information - 當UE在做roaming 的時候和收到從HPLMN與VPLMN的ANDSF規則,如何選擇active 的 ISMP,ISRP,WLANSP
WLANSP - 要選擇哪個最適合UE的WLAN
Home Operator Preference information - 讓UE建立PDN的連線而不透過WLAN連上網路


IARP應該是計畫中比較要用到的元件。
在此詳細介紹一下IARP的細節元件:




在IARP中可以設定多個Rules,但一次只能用一個Rule,為'Active' IARP Rule。 此外當UE在Roaming時,ANDSF不會提供IARP給UE。
AddressType - IPv4 或 IPv6
StartSourceIP - IPflow 的 IP addresses 範圍第一個 IP address
EndSourceIP - IPflow 的 IP addresses 範圍最後一個 IP address
ProtocolType - IPv4 header 的 Protocol , IPv6 header 的 Next header
StartSourcePortNumber - IPflow 的 PortNumbers 範圍第一個 PortNumber
EndSourcePortNumber - IPflow 的 PortNumbers 範圍最後一個 PortNumber
Qos - 設定Qos 參數
DomainName - 目的地的網址
APN - APN的名稱 , 有<APN>的格式
Update Policy - UE 是否要更新IARP rule



ANDSF 與UE傳遞的格式為 XML ,所以現在要研究 Android 要如何 讀取 XML格式


參考自 3GPP TS24.312( R12), TS23.402( R12)

2013年12月2日 星期一

需要格式化磁碟機才能使用

最近外接硬碟莫名其妙在開啟時一直出現 「 需要格式化磁碟機才能使用 」 但是又不想真的格式化,不然裡面的檔案就找不回來了。
此時只好求助Google 幫忙了,底下就是解決方法:

 對命令提示字元按右鍵,選擇「以系統管理員身分執行」,之後輸入指令:
 chkdsk e: /f
 e 就是你的外接式硬碟的代號,你可以換成你自己的硬碟編號。

2013年10月1日 星期二

wifite + reaver 破解無線網路AP密碼

剛開始光使用reaver 的程式,無法順利破解無線網路AP的密碼,所以後來找到一個wifite的程式,這個程式本來是用來破解WEP,這裡利用結合wifite 和 reaver的程式 , 順利破解無線網路AP密碼
安裝Reaver 套件
$ sudo apt-get install libpcap-dev libsqlite3-dev
$ wget https://reaver-wps.googlecode.com/files/reaver-1.4.tar.gz
$ tar zxf reaver-*.tar.gz
$ cd reaver-*/src
$ ./configure
$ make
$ sudo make install

安裝aircrack 可以監聽附近無線網路的封包
$ sudo add-apt-repository ppa:aking1012-com/aircrack-precise
$ sudo apt-update
$ sudo apt-get install aircrack-ng

安裝並執行Wifite
$ wget https://wifite.googlecode.com/files/wifite-2.0r85.tar.gz
$ tar zxf wifite-*.tar.gz
$ sudo ./wifite.py

起始畫面:

此時就會開啟一個mon0介面開始監聽附近的無線網路來源
列出附近的無線網路

按下ctrl + c 就停止搜尋 並且 選擇你所要破解的無線AP的列表號碼
開始破解 (花了4HR的時間)


我設定我破解的ap是WPA2-personal 的加密協定, 下次再試看看其他的加密協定. 目前市面上蠻多都是WPA2的AP,真是危險!!





參考來源: 網站連結

2013年9月2日 星期一

使用 wireshark in Ubuntu

啟動無線網卡至監聽模式(monitor) 要先安裝一個虛擬的無線界面 :mon0
安裝指令:
sudo apt-get install aircrack-ng

啟動指令:
sudo airmong-ng start wlan0

在sudo 下 啟動 wireshark 在capture 下的 interface 就會新增一個mon0的虛擬界面
這次我要取得特定的client 端的封包 , 所以我先取得client端的MAC address 在專門取得他所發送的封包即可.
在wireshark 的工具列 capture -> 勾選所要監聽的device(我選mon0) -> options(我要過濾一些封包)-> 點選選定的device 兩下 -> 勾選 capture packets in monitor mode -> 點選capture filter ->ethernet address -> 在filter string 的 eher host 之後改成我要抓的mac address -> 按下確定->start
即可開始監聽!!!
 
 
Blogger Templates