2009年12月12日 星期六

martian source 火星連線 @ 工作雜記 :: Xuite日誌

martian source 火星連線 @ 工作雜記 :: Xuite日誌
martian source 未知的連線
大量的洗螢幕和log檔
讓人煩不勝煩
log檔 /var/log/messages

Mar 19 16:36:43 ADSLserver kernel: ll header: ff:ff:ff:ff:ff:ff:00:48:54:5b:0d:3f:08:00
Mar 19 16:36:43 ADSLserver kernel: martian source 192.168.6.255 from 192.168.1.2, on dev eth0
Mar 19 16:36:43 ADSLserver kernel: ll header: ff:ff:ff:ff:ff:ff:00:48:54:5b:0d:3f:08:00
Mar 19 16:36:43 ADSLserver kernel: martian source 192.168.6.255 from 192.168.1.2, on dev eth0
Mar 19 16:36:43 ADSLserver kernel: ll header: ff:ff:ff:ff:ff:ff:00:48:54:5b:0d:3f:08:00

這就是所謂的
逆向路徑過濾 (Reverse Path Filtering)

這個情形常發生在兩個網段共存的linux 主機上
預設情況下﹐router 會路由所有東西﹐就算該封包‘顯然’不屬於貴網路的常見的例子﹐莫過於將私有 IP 泄漏到 internet 上去。
假如您有一個界面﹐其上設定的路由為 195.96.96.0/24﹐那您不會預期來自 212.64.94.1 的封包會到達這裡


其實是無害的
如果一直跑出來
可以選擇關掉它


解决方法 :

一、取消log_martians
echo 0 > /proc/sys/net/ipv4/conf/all/log_martians

二、或是關掉rp_filter
1.清空rp_filter
echo 0 >/proc/sys/net/ipv4/conf/eth0/rp_filter

注意:
紅字 eth0 為log檔內那個 device ,不可打錯

2.另外我們還要關掉 rp_filter
vi /etc/sysctl.conf
net.ipv4.conf.default.rp_filter=0

2009年12月9日 星期三

在Gentoo中使用因License被mask的包 - Andrew's Scratch - 博客大巴

在Gentoo中使用因License被mask的包 - Andrew's Scratch - 博客大巴

今天更新了GENTOO,发现virtualbox-bin有更新,但却被mask了,把virtualbox-bin添加到/etc/portage/package.unmask也不起作用:

!!! All ebuilds that could satisfy "app-emulation/virtualbox-bin" have been masked.
!!! One of the following masked packages is required to complete your request:
- app-emulation/virtualbox-bin-3.0.10 (masked by: PUEL license(s))
A copy of the 'PUEL' license is located at '/usr/portage/licenses/PUEL'.

For more information, see the MASKED PACKAGES section in the emerge
man page or refer to the Gentoo Handbook.

Google了一下,发现这个是因为License而被mask,解决方法有二:

一是在/etc/make.conf里面加入下面一行:

ACCEPT_LICENSE="PUEL"

二是在etc/portage/package.license里面添加下面的一行就可以了:

app-emulation/virtualbox-bin PUEL

2009年12月1日 星期二

Connect to GPRS/3G over Bluetooth

PPP原理參考: http://www.xs4all.nl/~ernstagn/GPRS-HOWTO/
安裝 blueman-1.21
然後在 /etc/ppp/options 加入 noipdefault
即可透過 blueman 的PPPSupport 機制上網

2009年11月4日 星期三

JavaScript修改CSS樣式

分為改變直接樣式,改變className和改變cssText三種。需要注意的是:
注意大小寫:
javascript對大小寫十分敏感,className不能夠把「N」寫成「n」,cssText也不能夠把「T」寫成「t」,否則無法實現效果。
調用方法:
如果改變className,則事先在樣式表中申明類,但調用時不要再跟style,像document.getElementById('obj').style.className="…"的寫法是錯誤的!
只能寫成:document.getElementById('obj').className="…"
或是 this.className="..." 也可
改變cssText
但是如果用cssText的話,必須加上style,正確的寫法是:document.getElementById('obj').style.cssText="…"

改變直接樣式我就不必說了,大家記得要寫到具體樣式即可,如
document.getElementById('obj').style.backgroundColor="#003366"

來源:
http://www.wowbox.com.tw/blog/article.asp?id=3032

2009年10月25日 星期日

php 模擬送出 http/https/ssl POST 請求

參考面網址
http://twpug.net/modules/smartfaq/faq.php?faqid=8

$curl = curl_init("https://localhost/test.php);
這行有點小錯誤, 應該是
$curl = curl_init("https://localhost/test.php");

代碼:


$PostData = "foo=abc&bar=def";

$curl = curl_init("https://10.3.0.34/a3.php");

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); //這行請參考 http://curl.haxx.se 的介紹
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //這行請參考 http://curl.haxx.se 的介紹

//設定伺服器憑證,要不要像我忘了... 請自己 try 一下
//curl_setopt($curl, CURLOPT_CAPATH, "/certificate");
//curl_setopt($curl, CURLOPT_CAINFO, "/certificate/server.crt");

//不直接顯示回傳結果
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

//post資料給指定網頁
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $PostData);

$Result = curl_exec($curl);

curl_close($curl);

?>
資料送出

-----
1. 開啟 php_openssl
2. 範例 fsockopen()
代碼:
$set_userid = "admin";
$set_passwd = "123456";
$POST_VALUES = "my_userid=" . $set_userid . "&my_passwd=" . $set_passwd;
$fp = fsockopen("ssl://192.168.0.1", 443, $errno, $errstr, 30);
if ($fp){
$out = "";
$out .= "POST /my_service/login.php HTTP/1.1\r\n";
$out .= "Host: 192.168.0.1\r\n";
$out .= "Accept: text/html\r\n";
$out .= "Connection: close\r\n";
$out .= "Content-Type: application/x-www-form-urlencoded\r\n";
$out .= "Content-length: " . strlen($POST_VALUES) . "\r\n";
$out .= "\r\n";
$out .= ($POST_VALUES) . "\r\n";
fputs($fp, $out);
while (!feof($fp)){
$log .= fgets($fp, 1024);
}
fclose($fp);
}
echo $log;

來源: http://forum.icst.org.tw/phpbb/viewtopic.php?t=10151

2009年9月27日 星期日

用 ip 指令設定特定的 routing rule

公司網路在防火牆後面,如果要外面連到公司內部,必須透過 VPN
為了方面在家時可以取得公司電腦的資料,便直接在 NAT server 上面設定自動連接 VPN
方法可參考之前寫的 linux 中使用 pptp client 連線到windows vpn server 包含 mppe-128 支援

一切看起來都運作的很好,直到有一天在公司突然想連線回家裡電腦拿些資料
卻發現無法連線,VPN 關掉後卻可以正常,看來問題是出在 VPN 上
經過一番研究,終於發現問題出在哪了

從公司連線到家裡網路時,封包內容: src ip=公司ip, dest ip=家裡ISP ip
回應時封包內容: src ip=家裡ISP ip, dest ip=公司ip
這邊看起來都正常沒錯,但是在有 VPN 的情況下
本來應該透過 ISP 回去的封包,會因為 VPN 的 routing 設定變成透過 VPN,所以封包會 lost

這時就必須透過 iproute2 提供的 ip 來指定特定的 routing rule,如下:
假設公司網域: 192.168.0.0/16 家裡網路gateway: 1.2.3.254, 家裡ip: 1.2.3.4
#把新的 routing path 加入 routing table 100 中
ip route add 192.168.0.0/16 via 1.2.3.254 table 100
#新增 routing rule,當符合時參考 table 100 中定義應該往那丟封包
ip rule add from 1.2.3.4 to 192.168.0.0/16 table 100

解釋一下上面兩行指令的作用:
linux kernel 處理封包流程會先參考 ip rule 的設定,可用 ip rule ls 察看:
# ip rule ls
0: from all lookup local
32765: from 1.2.3.4 to 192.168.0.0/16 lookup 100
32766: from all lookup main
32767: from all lookup default
(除了第2條是剛剛加進去的以外,其他是預設值,所以在預設情況下,並不會察看封包的來源)
當 rule 條件符合時,察看相關的 routing table,可用 ip route ls table 100/main/... 看 table 內容:
# ip route ls table 100
192.168.0.0/16 via 1.2.3.254 dev ppp0

這樣就可以讓從 ISP 近來的封包一樣從 ISP 回去,而不是 VPN

ps. routing table 可以指定名稱在 /etc/iproute2/rt_tables

2009年9月3日 星期四

Linux 底下 「screen」指令的使用

敲入命令screen ( -U 可以以 UTF-8 方式啟動)
會創建一個跑著shell的單一視窗
在這裏面
你可以跑你所需要的程式
然後「Ctrl-a + d 」退出剛創建的視窗(回到進入screen前的環境)
然後再敲入命令screen創建新的終端視窗
就這樣 你可以建立多個有shell的視窗(這些視窗裏都可以跑你自己的應用)
這樣就是你退出遠端管理視窗(進入screen的環境)
你的screen窗間的窗口都不會關閉
裏面跑得應用程式自然也不會當掉
用screen -ls可以看所有的screen sessions
最後
screen session不再使用的時候
screen -r sessionid進去
exit退出即可

Unix/Linux 工具: Screen 命令使用
screen使用
使用screen非常簡易.只需在SHELL鍵入screen,便可打開一個screen session。
而在每個screen session 下,所有命令都以 ctrl+a(C-a) 開始。
現在讓我來簡單介紹基本的命令
C-a c -> Create == 開啟新的 window
C-a n -> Next == 切換到下個 window
C-a p -> Previous == 前一個 window
C-a C-a -> Other == 在兩個 window 間切換
C-a w -> Windows == 列出已開啟的 windows 有那些
C-a 0 -> 切換到第 0 個 window
C-a 1..9 -> 切換到第 1..9 個window
C-a a -> 發出 C-a,在 emacs, ve, bash, tcsh 下可移到行首
C-a t -> Time,顯示當前時間,和系統的 load
C-a K(大寫) -> kill window,強行關閉當前的 window
C-a [ -> 進入 copy mode,在 copy mode 下可以回滾、搜索、複製就像用使用 vi 一樣
C-b Backward,PageUp
C-f Forward,PageDown
H(大寫) High,將游標移至左上角
L Low,將游標移至左下角
0 移到行首
$ 行末
w forward one word,以字為單位往前移
b backward one word,以字為單位往後移
Space 第一次按為標記區起點,第二次按為終點
Esc 結束 copy mode

C-a ] -> Paste,把剛剛在 copy mode 選定的內容貼上
C-a ? -> Help,顯示簡單說明
C-a d -> detach,將目前的 screen session (可能含有多個 windows)
   丟到後臺執行當按了 C-a d 把 screen session detach 掉後,會回到還沒進 screen 時的狀態,此時在 screen session 裏每個 window 內運行的 process (無論是前臺/後臺)都在繼續執行,即使 logout 也不影響。下次 login 進來時:screen -ls -> 顯示所有的 screen sessions
screen -r [keyword] -> 選擇一個screen session 恢復對話若 screen -ls 裏有 Attached sessions:
screen -d [keyword] -> 強制 detach,以便「接手」過來
Related Posts Plugin for WordPress, Blogger...