自由學習的風

幽夢影 張潮 少年讀書,如隙中窺月;中年讀書,如庭中望月;老年讀書,如臺上玩月。皆以閱歷之淺深,為所得之淺深耳。

利用 edu2016 (ubuntu) 快速檢查 DNS 服務是否開啟 recursive query

2017年9月26日 星期二

最近學校和中心都快被 DNS 大量查詢攻擊煩得受不了,各位夥伴也可以自己來查一下校內是否有些未控管的 DNS Server 被當成肉雞去攻擊網路。

首先,若你有 edu2016 或 ntpcU 的新北教育作業系統,就可以直接利用 apt-get 來安裝 nmap  這支工具來幫忙快速檢查校內所有的 ip。步驟如下:

  1.  sudo apt-get update && sudo apt-get install nmap
  2.  sudo nmap  -sU 53 --script=dns-recursion  <target>
(藍色部分自行換成  校內的 ip,如:  sudo nmap -sU 53 --script=dns-recursion 10.231.1.1/24  )

若未關閉遞迴查詢(recursion query),畫面為:










※在自己校內掃自己的 DNS 看到 recursion 有時是因為允許校內的 IP 做 recursion 查詢。

[轉][CodeIgniter] 利用 hook 來處理全部的輸出

2017年9月17日 星期日

參考 http://lzzpnk.blogspot.tw/2012/06/codeigniter-hook-alt.html

1. 在 ./application/config/config.php
 $config['enable_hooks'] = TRUE;


2. ./application/config/hooks.php 設定執行的程式
$hook['display_override'][] = array(
        'class'    => '',
        'function' => 'images_auto_set_alt',
        'filename' => 'output.php',
        'filepath' => 'hooks',
        'params'   => array( 'output_display' => TRUE )
    );​ 
3. ./application/hook/output.php
/**
     * 將輸出的 圖片(<img>) 進行處理;自動配置 alt 屬性。
     *
     * @param array   $setting=array() 設定
     *                $setting['output_display'] => 是否直接輸出給瀏覽器。FALSE代表不直接輸出,僅回存至buffer。
     * @return NULL                    不會回傳東西。
     */
    function images_auto_set_alt( $setting=array() ) {
        $CI =& get_instance();
        $CI->load->library( 'simple_html_dom' ); // require_once APPPATH . 'libraries/simple_html_dom.php';
        $buffer = $CI->output->get_output();
        $DOM = str_get_html( $buffer );
        foreach ( $DOM->find( 'img' ) as $key => $img ) {
            if ( empty( $img->alt ) && ! strpos( $img->alt, $CI->config->item( 'site_name' ) ) ) {
                $img->alt = $CI->config->item( 'site_name' );
            }
            else {
                $img->alt .= ' - ' . $CI->config->item( 'site_name' );
            }
        }
        $CI->output->set_output( $DOM->save() );
        if ( $setting['output_display'] ) {
            $CI->output->_display();
        }
    } 

[mysql] 升級到 MySQL 5.7 時,突然無法新增資料

2017年9月11日 星期一

mysql 若有從 5.x 升級到 5.7 的夥伴注意一下,date, datetime 在 5.7 的版本預設是不允許空白或 '0000-00-00" 、"0000-00-00 00:00:00" 的內容,所以若要新增時會發生錯誤!

可以在 my.cnf 把 sql_mode 修改如下:
[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" 

或是臨時解決方式:
在每一次新增時,先執行這段指令,也可以避開這個錯誤!
SET sql-mod='';

[系統] 是 Windows 太保守?還是 Linux 太前衛?

2017年9月4日 星期一

不曉得從什麼時候開始, Windows 7(10) 更新時常常會出現失敗,而更新失敗又會導致不斷重新開機更新,得循環 2、3次才會進入 Windows 桌面,好一陣子還被同事埋怨,怎麼拿這麼舊的機器給她,開機都得等個二、三十分鐘,我了個去~~~這鍋背得…好冤啊!

Windows 只認得兩種檔案系統:FAT(32)和NTFS,別的一概不管,在系統碟裡若有分割區是在這兩種之外,用來當做資料碟的話,倒沒什麼關係,頂多就是資料讀不到,但是若是用來安裝系統……呵!呵!呵!那就麻煩了!

這幾年通常都是裝雙系統在電腦裡(是真的雙系統喔!Windows 和 Linux,而不是  Windows XP, Windows 7, Windows 10 的雙系統),因為 Windows 認不得其其它眾多的檔案系統,所以都是將 Linux 最後安裝並使用預設的 Grub2 開機管理員,這樣可以選擇 Linux 開機,還是 Windows 開機。

很不幸,問題來了,不曉得從什麼時候開始,Windows 更新會重新開機,然後再繼續更新,若不是由 Windows 的預設開機管理員(bcd)的話,更新會失敗,然後…再重新開機,再更新失敗…重開…失敗…這個過程會導致開機過程會拖延20~30分鐘。

是 Windows 只想守住眼前的3分1畝地?還是該怪 Linux 太過前衛到想把所有的檔案系統都統包呢?我也不知!不過,我知道若想繼續使用 Windows,這種情況會導出最後唯一的結果,就是把系統硬碟裡不是 FAT 和  NTFS  的分割區刪掉,So, Windows always win...

[CodeIgniter] 將 Session 資料存入資料庫

2017年9月2日 星期六

Reference: http://superlevin.ifengyuan.tw/codeigniter3-0%E5%B0%87session%E5%AF%AB%E5%85%A5db/

CREATE TABLE IF NOT EXISTS `ci_sessions` (        `id` varchar(40) NOT NULL,        `ip_address` varchar(45) NOT NULL,        `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,        `data` blob NOT NULL,        PRIMARY KEY (id),        KEY `ci_sessions_timestamp` (`timestamp`));


設定 application/config/config.php
$config['sess_driver'] = 'database';$config['sess_save_path'] = 'ci_sessions';









[CodeIgniter] 讀取 2 個資料庫

Reference: stack overflow https://stackoverflow.com/questions/8268853/codeigniter-multiple-database-connections#

同時連線2個資料庫

Database 1:
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "database_name";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
$db['default']['swap_pre'] = "";
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
Database 2:
$db['otherdb']['hostname'] = "localhost";
$db['otherdb']['username'] = "root";
$db['otherdb']['password'] = "";
$db['otherdb']['database'] = "other_database_name";
$db['otherdb']['dbdriver'] = "mysql";
$db['otherdb']['dbprefix'] = "";
$db['otherdb']['pconnect'] = TRUE;
$db['otherdb']['db_debug'] = FALSE;
$db['otherdb']['cache_on'] = FALSE;
$db['otherdb']['cachedir'] = "";
$db['otherdb']['char_set'] = "utf8";
$db['otherdb']['dbcollat'] = "utf8_general_ci";
$db['otherdb']['swap_pre'] = "";
$db['otherdb']['autoinit'] = TRUE;
$db['otherdb']['stricton'] = FALSE;

Use it:
function my_model_method()
{
  $otherdb = $this->load->database('otherdb', TRUE); // the TRUE paramater tells CI that you'd like to return the database object.

  $query = $otherdb->select('first_name, last_name')->get('person');
  var_dump($query);
}