作者 主題: 浮動IP的server只有一個會通的問題  (閱讀 40503 次)

0 會員 與 1 訪客 正在閱讀本文。

kuolung

  • 俺是博士!
  • *****
  • 文章數: 1031
    • 檢視個人資料
    • http://www.kuolung.net
浮動IP的server只有一個會通的問題
« 回覆 #30 於: 2007-03-02 17:42 »
引述: "stlee"
看來/sbin/ip這個指令可是博大精深呢.....能介紹本好書(中文的)來研究研究嗎
比如我現在手上有一本LINUX行程間通訊:技巧秘辛(已絕版)裡面只講到兩個主題
1.行程2.執行緒
這一類專門主題(講/sbin/ip這個指令)的書

看來今天的功課是找書了,希望有知道這種書的大大能告知,非常感謝


說實話,我個人看有關 Linux 的書,很少,多半用 man 比較多,不然就是原始網站上的文件,還有這裡的討論區了,還有一個地方也有很多好用的資料,就是您在安裝 Linux 時給它選 everything 這個東東,之後呢 在 /usr/share/doc 中 ( 以 redhat 的為例 ),就有所有您想知道的東東了,不過是英文的就是了,HowTo ,MiniHowTo 也不錯 ,http://tldp.org 也會有所有您想看的東東,有很多是中文的
=========================
http://www.kuolung.net
==========================

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #31 於: 2007-03-03 14:40 »
代碼: [選擇]

lee_runnewip()---->開始
Error: an inet address is expected rather than "dev".
k=256 /sbin/ip route replace default via `/sbin/ifconfig ppp0 | /bin/grep 'inet addr' | /bin/awk '{print replace}' | /bin/sed -e 's/.*://'` dev ppp0 table 10
Error: an inet address is expected rather than "dev".
k=256 /sbin/ip route replace default via `/sbin/ifconfig ppp1 | /bin/grep 'inet addr' | /bin/awk '{print replace}' | /bin/sed -e 's/.*://'` dev ppp1 table 20

Error: an inet address is expected rather than "dev".
k=256 /sbin/ip route replace default via `/sbin/ifconfig ppp0 | /bin/grep 'inet addr' | /bin/awk '{print default}' | /bin/sed -e 's/.*://'` dev ppp0 table 10
Error: an inet address is expected rather than "dev".
k=256 /sbin/ip route replace default via `/sbin/ifconfig ppp1 | /bin/grep 'inet addr' | /bin/awk '{print default}' | /bin/sed -e 's/.*://'` dev ppp1 table 20

Error: an IP address is expected rather than "dev"
k=256 /sbin/ip route replace default scope global nexthop via `/sbin/ifconfig ppp0 | /bin/grep 'inet addr' | /bin/awk '{print default}' | /bin/sed -e 's/.*://'` dev ppp0 weight 1nexthop via `/sbin/ifconfig ppp1 | /bin/grep 'inet addr' | /bin/awk '{print default}' | /bin/sed -e 's/.*://'` dev ppp1 weight 1
lee_runnewip()---->結束


Error: an inet address is expected rather than "dev".
這句是什麼意思呢???能請英文較好的人告知一下嗎



ps.找書不如找"人":
http://www.study-area.org/network/networkfr2.htm
努力k中,其中關於路由的部份可能就是現在遇到的問題所在
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
浮動IP的server只有一個會通的問題
« 回覆 #32 於: 2007-03-03 15:24 »
是不是你的 IP 變數是空的??

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #33 於: 2007-03-03 17:10 »
引述: "netman"
是不是你的 IP 變數是空的??


意思是說要傳給他的是如111.222.333.444這樣一個有實際(不一定是固定IP)存在的字串資料嗎???

也就是
/sbin/ip route replace default via `/sbin/ifconfig ppp0 | /bin/grep 'inet addr' | /bin/awk '{print replace}' | /bin/sed -e 's/.*://'` dev ppp0 table 10
的ppp0的部分變成111.222.333.444了嗎?試試看先
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
浮動IP的server只有一個會通的問題
« 回覆 #34 於: 2007-03-03 23:58 »
`/sbin/ifconfig ppp0 | /bin/grep 'inet addr' | /bin/awk '{print replace}' | /bin/sed -e 's/.*://'`
上面這段可以存到一個變數去:
my_ip=`/sbin/ifconfig ppp0 | /bin/grep 'inet addr' | /bin/awk '{print replace}' | /bin/sed -e 's/.*://'`
然後測試它有沒值:
[ -n "$my_ip" ]
如果沒,可以跳出函數或程式:
[ -n "$my_ip" ] || return 1
or:
[ -n "$my_ip" ] || exit 1
然後再是你的 ip 命令:
/sbin/ip route replace default via $my_ip dev ppp0 table 10

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #35 於: 2007-03-04 02:22 »
剛關店回來被老婆拖去吃東西現在才看到可能明天才能試了 :oops: ,不過將目前理解的先寫下來(不然明天忘了事情可大條了)
請netman大大看看

`/sbin/ifconfig ppp0 | /bin/grep 'inet addr' | /bin/awk '{print replace}' | /bin/sed -e 's/.*://'`
這一列應視為一個單獨的命令所以須先測試其傳回值
以system()函數來說,命令失敗傳回127其他失敗傳回-1,所以當不是傳回這兩個值時
則表示該命令成功,成功則去取得該IP的位址字串如"111.222.333.444"
(已有寫一個函數可依"ppp0","eth0"等的字串去取得該設備IP字串)

然後將該字串代入後變成這樣的一個命令字串
s=/sbin/ip route replace default via xxx.xxx.xxx.xxx dev ppp0 table 10
再以該命令字串作為參數system(s)
xxx.xxx.xxx.xxx的部份是指目前以ifconfig能看到的ppp0,ppp1的IP

也就是必須在程式中叫用兩次系統呼叫system()
第一次是測試,第二次將測試成功的值(可能可以直接轉成位址,如不行則已經有函數可取得該字串,故第一次測試部分必須先確定不是失敗的系統呼叫再以目前的IP字串代入第二次的命令)
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #36 於: 2007-03-04 13:22 »
對了
`/sbin/ifconfig ppp0 | /bin/grep 'inet addr' | /bin/awk '{print replace}' | /bin/sed -e 's/.*://'`
這一行主要是要去測試出該設備是否存在嗎??如果是的話我有寫一個函數在做這件事的
該函數除了可以測試外還可去取得該設備的ip字串,所以如果是這樣的話則此行應該可以不用

/sbin/ip route replace default via $my_ip dev ppp0 table 10
這一行命令比較有趣,$my_ip 應該就是指一個IP字串"111.222.333.444"
如果是這樣的話則以我已經寫好的那個函數去測試設備然後依取得的字串代入即可
而ppp0,10是兩個變數,應隨設備編號增加而增加其值ppp0,1,2...  10,20,30...
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

kuolung

  • 俺是博士!
  • *****
  • 文章數: 1031
    • 檢視個人資料
    • http://www.kuolung.net
浮動IP的server只有一個會通的問題
« 回覆 #37 於: 2007-03-04 15:14 »
引述: "stlee"
對了
`/sbin/ifconfig ppp0 | /bin/grep 'inet addr' | /bin/awk '{print replace}' | /bin/sed -e 's/.*://'`
這一行主要是要去測試出該設備是否存在嗎??如果是的話我有寫一個函數在做這件事的
該函數除了可以測試外還可去取得該設備的ip字串,所以如果是這樣的話則此行應該可以不用


正確

引述: "stlee"

/sbin/ip route replace default via $my_ip dev ppp0 table 10
這一行命令比較有趣,$my_ip 應該就是指一個IP字串"111.222.333.444"
如果是這樣的話則以我已經寫好的那個函數去測試設備然後依取得的字串代入即可
而ppp0,10是兩個變數,應隨設備編號增加而增加其值ppp0,1,2...  10,20,30...


就是這樣,看來你有比較用心在看 code 了
=========================
http://www.kuolung.net
==========================

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #38 於: 2007-03-04 16:36 »
通了啦!!!通了啦!!!
等等傳畫面上來
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #39 於: 2007-03-04 17:07 »
server端將持續聆聽clinet端,在進行IP迴避後由於還沒寫到自動以備用IP連線的功能所
以在clinet端被斷線後以手動輸入server端新取得的IP進行連線,以010101的順序交替測試
server端新取得的IP是否可供保持原使用者不斷線

以下是server端測試的畫面:
代碼: [選擇]

[root@localhost tmp]# ./go

  Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
使用IP:122.123.136.37 備用IP=122.123.138.59
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共0次
222 接收到使用者的連線要求 fd=4
使用IP:122.123.136.37 備用IP=122.123.138.59
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共1次
444 伺服器已取得使用者傳來的字串=@ fd=4
使用IP:122.123.136.37 備用IP=122.123.138.59
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共2次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.37 備用IP=122.123.138.59
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共3次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.37 備用IP=122.123.138.59
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共4次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.37 備用IP=122.123.138.59
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共5次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.37 備用IP=122.123.138.59
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共6次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.37 備用IP=122.123.138.59
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共7次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.37 備用IP=122.123.138.59
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共8次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.37 備用IP=122.123.138.59
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共9次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.37 備用IP=122.123.138.59
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共10次
444 伺服器已取得使用者傳來的字串=! fd=4
/home/stlee/leelib/net/getip.c -->lee_newip()開始
ppp0設備已啟動現正重新取得IP(原IP為 122.123.136.37 )
ppp0設備已重新取得IP為 122.123.145.27
ppp1設備已啟動現正重新取得IP(原IP為 122.123.138.59 )
ppp1設備已重新取得IP為 122.123.147.153
/home/stlee/leelib/net/getip.c -->lee_newip()結束
lee_runnewip()---->開始
k=0 /sbin/ip rule add pref 10 from 122.123.145.27 table 10
k=0 /sbin/ip rule add pref 20 from 122.123.147.153 table 20

k=0 /sbin/ip route replace default via 122.123.128.254 dev ppp0 table 10
k=0 /sbin/ip route replace default via 122.123.128.254 dev ppp1 table 20

lee_runnewip()---->結束
使用IP:122.123.145.27 備用IP=122.123.147.153
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共2次
333 使用者已離線 fd=4
使用IP:122.123.145.27 備用IP=122.123.147.153
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共3次
222 接收到使用者的連線要求 fd=4
使用IP:122.123.145.27 備用IP=122.123.147.153
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共4次
444 伺服器已取得使用者傳來的字串=@ fd=4
使用IP:122.123.145.27 備用IP=122.123.147.153
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共5次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.145.27 備用IP=122.123.147.153
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共6次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.145.27 備用IP=122.123.147.153
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共7次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.145.27 備用IP=122.123.147.153
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共8次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.145.27 備用IP=122.123.147.153
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共9次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.145.27 備用IP=122.123.147.153
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共10次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.145.27 備用IP=122.123.147.153
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共11次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.145.27 備用IP=122.123.147.153
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共12次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.145.27 備用IP=122.123.147.153
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共13次
444 伺服器已取得使用者傳來的字串=! fd=4
/home/stlee/leelib/net/getip.c -->lee_newip()開始
ppp0設備已啟動現正重新取得IP(原IP為 122.123.145.27 )
ppp0設備已重新取得IP為 122.123.139.239
ppp1設備已啟動現正重新取得IP(原IP為 122.123.147.153 )
ppp1設備已重新取得IP為 122.123.138.210
/home/stlee/leelib/net/getip.c -->lee_newip()結束
lee_runnewip()---->開始
k=0 /sbin/ip rule add pref 10 from 122.123.139.239 table 10
k=0 /sbin/ip rule add pref 20 from 122.123.138.210 table 20

k=0 /sbin/ip route replace default via 122.123.128.254 dev ppp0 table 10
k=0 /sbin/ip route replace default via 122.123.128.254 dev ppp1 table 20

lee_runnewip()---->結束
使用IP:122.123.139.239 備用IP=122.123.138.210
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共2次
333 使用者已離線 fd=4
使用IP:122.123.139.239 備用IP=122.123.138.210
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共3次
222 接收到使用者的連線要求 fd=4
使用IP:122.123.139.239 備用IP=122.123.138.210
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共4次
444 伺服器已取得使用者傳來的字串=@ fd=4
使用IP:122.123.139.239 備用IP=122.123.138.210
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共5次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.139.239 備用IP=122.123.138.210
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共6次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.139.239 備用IP=122.123.138.210
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共7次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.139.239 備用IP=122.123.138.210
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共8次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.139.239 備用IP=122.123.138.210
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共9次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.139.239 備用IP=122.123.138.210
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共10次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.139.239 備用IP=122.123.138.210
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共11次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.139.239 備用IP=122.123.138.210
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共12次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.139.239 備用IP=122.123.138.210
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共13次
444 伺服器已取得使用者傳來的字串=! fd=4
/home/stlee/leelib/net/getip.c -->lee_newip()開始
ppp0設備已啟動現正重新取得IP(原IP為 122.123.139.239 )
ppp0設備已重新取得IP為 122.123.134.226
ppp1設備已啟動現正重新取得IP(原IP為 122.123.138.210 )
ppp1設備已重新取得IP為 122.123.150.245
/home/stlee/leelib/net/getip.c -->lee_newip()結束
lee_runnewip()---->開始
k=0 /sbin/ip rule add pref 10 from 122.123.134.226 table 10
k=0 /sbin/ip rule add pref 20 from 122.123.150.245 table 20

k=0 /sbin/ip route replace default via 122.123.128.254 dev ppp0 table 10
k=0 /sbin/ip route replace default via 122.123.128.254 dev ppp1 table 20

lee_runnewip()---->結束
使用IP:122.123.134.226 備用IP=122.123.150.245
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共2次
333 使用者已離線 fd=4
使用IP:122.123.134.226 備用IP=122.123.150.245
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共3次
222 接收到使用者的連線要求 fd=4
使用IP:122.123.134.226 備用IP=122.123.150.245
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共4次
444 伺服器已取得使用者傳來的字串=@ fd=4
使用IP:122.123.134.226 備用IP=122.123.150.245
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共5次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.134.226 備用IP=122.123.150.245
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共6次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.134.226 備用IP=122.123.150.245
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共7次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.134.226 備用IP=122.123.150.245
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共8次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.134.226 備用IP=122.123.150.245
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共9次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.134.226 備用IP=122.123.150.245
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共10次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.134.226 備用IP=122.123.150.245
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共11次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.134.226 備用IP=122.123.150.245
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共12次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.134.226 備用IP=122.123.150.245
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共13次
444 伺服器已取得使用者傳來的字串=! fd=4
/home/stlee/leelib/net/getip.c -->lee_newip()開始
ppp0設備已啟動現正重新取得IP(原IP為 122.123.134.226 )
ppp0設備已重新取得IP為 122.123.136.166
ppp1設備已啟動現正重新取得IP(原IP為 122.123.150.245 )
ppp1設備已重新取得IP為 122.123.149.184
/home/stlee/leelib/net/getip.c -->lee_newip()結束
lee_runnewip()---->開始
k=0 /sbin/ip rule add pref 10 from 122.123.136.166 table 10
k=0 /sbin/ip rule add pref 20 from 122.123.149.184 table 20

k=0 /sbin/ip route replace default via 122.123.128.254 dev ppp0 table 10
k=0 /sbin/ip route replace default via 122.123.128.254 dev ppp1 table 20

lee_runnewip()---->結束
使用IP:122.123.136.166 備用IP=122.123.149.184
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共2次
333 使用者已離線 fd=4
使用IP:122.123.136.166 備用IP=122.123.149.184
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共3次
222 接收到使用者的連線要求 fd=4
使用IP:122.123.136.166 備用IP=122.123.149.184
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共4次
444 伺服器已取得使用者傳來的字串=@ fd=4
使用IP:122.123.136.166 備用IP=122.123.149.184
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共5次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.166 備用IP=122.123.149.184
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共6次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.166 備用IP=122.123.149.184
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共7次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.166 備用IP=122.123.149.184
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共8次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.166 備用IP=122.123.149.184
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共9次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.166 備用IP=122.123.149.184
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共10次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.166 備用IP=122.123.149.184
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共11次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.166 備用IP=122.123.149.184
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共12次
444 伺服器已取得使用者傳來的字串=A fd=4
使用IP:122.123.136.166 備用IP=122.123.149.184
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共13次
444 伺服器已取得使用者傳來的字串=! fd=4
/home/stlee/leelib/net/getip.c -->lee_newip()開始
ppp0設備已啟動現正重新取得IP(原IP為 122.123.136.166 )
ppp0設備已重新取得IP為 122.123.150.210
ppp1設備已啟動現正重新取得IP(原IP為 122.123.149.184 )
ppp1設備已重新取得IP為 122.123.149.146
/home/stlee/leelib/net/getip.c -->lee_newip()結束
lee_runnewip()---->開始
k=0 /sbin/ip rule add pref 10 from 122.123.150.210 table 10
k=0 /sbin/ip rule add pref 20 from 122.123.149.146 table 20

k=0 /sbin/ip route replace default via 122.123.128.254 dev ppp0 table 10
k=0 /sbin/ip route replace default via 122.123.128.254 dev ppp1 table 20

lee_runnewip()---->結束
使用IP:122.123.150.210 備用IP=122.123.149.146
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共2次
333 使用者已離線 fd=4
使用IP:122.123.150.210 備用IP=122.123.149.146
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共3次

[root@localhost tmp]#


以下是clinet端測試的畫面,由於為寫到自動以備用IP與server端連線,所以在每次斷線後
重新輸入server端新取得的IP進行編譯後執行連線:
代碼: [選擇]

[stlee2@localhost tmp]$ ./go
目標IP:122.123.136.37 埠號:1688
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = !
[stlee2@localhost tmp]$ ./go.sh
cc    -c -o cli.o cli.c
gcc -g -o go cli.c -lcurses -lefence
./[stlee2@localhost tmp]$ ./go
目標IP:122.123.147.153 埠號:1688
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = !
[stlee2@localhost tmp]$ ./go.sh
cc    -c -o cli.o cli.c
gcc -g -o go cli.c -lcurses -lefence
./[stlee2@localhost tmp]$ ./go
目標IP:122.123.139.239 埠號:1688
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = !
[stlee2@localhost tmp]$ ./go.sh
cc    -c -o cli.o cli.c
gcc -g -o go cli.c -lcurses -lefence
[stlee2@localhost tmp]$ ./go
目標IP:122.123.150.245 埠號:1688
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = !
[stlee2@localhost tmp]$ ./go.sh
cc    -c -o cli.o cli.c
gcc -g -o go cli.c -lcurses -lefence
.[stlee2@localhost tmp]$ ./go
目標IP:122.123.136.166 埠號:1688
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = A
(伺服器傳回結果) = !
[stlee2@localhost tmp]$


在此次的測試中IP在重新取得後皆可連通,當然測試時是以兩個IP進行交互使用,但如可
取得n個IP則可以輪詢方式進行IP迴避
每次去取得一個新的IP須費時七秒,對電腦來說七秒鐘的時間可以幹很多事了,雖然可以透
過執行緒的手段使程式不會有停頓,但它仍是要等七秒後該IP才能使用,所以當兩個IP同時
遭受攻擊,則會發生斷線的情形(這是該程式邏輯上的漏洞),所以既然已經知道該漏洞
也就可以針對這類漏洞進行防治,但這是以後才能去實做

現在應解決的是GWPPP0=,GWPPP1=命令是如何取得122.123.128.254這個字串的
因為無法取得該字串所以在第二個$IP route replace .... $GWPPP0 ......
中的$GWPPP0是以ifconfig指令下的P-t-P後的那個值直接填上去的,雖然可行但不應寫死在
程式裡面,所以希望能再指點指點小弟該如何(或此值是何意義)去取得該值.....萬分感謝
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #40 於: 2007-03-04 19:23 »
資料亂找一通以後......
gateway=閘道器
鳥哥書上說:成大環工的閘道器IP是140.116.XXX.XXX
我取得的中華電信的是:122.123.128.254
也就是說該IP所指向的是一台機器,所以必須不是以程式去取得
而應該成為一個參數去讓使用者自行設定

是不是這樣???
可是ifconfig指令能正確去取得,所以該資料應該在"封包裡面"
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #41 於: 2007-03-05 01:29 »
突發奇想:以取得IP字串的函數去取eth0的試看看

ioctl()函數可能也可以:
http://phorum.study-area.org/viewtopic.php?t=44162

都試試
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #42 於: 2007-03-05 04:01 »
ip route replace default nexthop via $gwppp0 dev $ppp0
不打 via $gwppp0
ip route replace default nexthop dev $ppp0
應該一樣可行喔 ... 試試看吧 (可能僅限 P-t-P 的 IP 取得方式吧)


啟動多個 ppp 連線 ... 也可不從編輯 ifcfg-pppX
執行一次 adsl-start 後編輯出來的 pppoe.conf 檔案 (vi 可改使用哪張卡)
將他複製到 /tmp 試試
cp pppoe.conf /tmp/01pppoe.conf ; adsl-atsrt /tmp/01pppoe.conf
cp pppoe.conf /tmp/02pppoe.conf ; adsl-atsrt /tmp/02pppoe.conf
引入的路徑重複才會被視為 "介面已連線"

另外 ..
雖只用到 ppp0 跟 ppp1 ...
但何不多抓兩個 ppp2 ppp3 ... 省去執行時更換 IP 時間呢 ??

(好久沒碰電腦嚕 ... 準備從頭學起 ..... 還請大大實做後再定論)

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
浮動IP的server只有一個會通的問題
« 回覆 #43 於: 2007-03-05 08:47 »
呵,我也來出個主意:
如果 ppp 換了 ip,可以嘗試用 /etc/ppp 目錄裡的 ip-down & ip-up 來自動呼叫你要跑的 program。

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #44 於: 2007-03-05 15:42 »
引述: "dark"
ip route replace default nexthop via $gwppp0 dev $ppp0
不打 via $gwppp0
ip route replace default nexthop dev $ppp0
應該一樣可行喔 ... 試試看吧 (可能僅限 P-t-P 的 IP 取得方式吧)


啟動多個 ppp 連線 ... 也可不從編輯 ifcfg-pppX
執行一次 adsl-start 後編輯出來的 pppoe.conf 檔案 (vi 可改使用哪張卡)
將他複製到 /tmp 試試
cp pppoe.conf /tmp/01pppoe.conf ; adsl-atsrt /tmp/01pppoe.conf
cp pppoe.conf /tmp/02pppoe.conf ; adsl-atsrt /tmp/02pppoe.conf
引入的路徑重複才會被視為 "介面已連線"

另外 ..
雖只用到 ppp0 跟 ppp1 ...
但何不多抓兩個 ppp2 ppp3 ... 省去執行時更換 IP 時間呢 ??

(好久沒碰電腦嚕 ... 準備從頭學起 ..... 還請大大實做後再定論)


第一個辦法很像不行呢(可能我多做或少做了什麼):
但有個奇怪的現象


先看server端畫面:
代碼: [選擇]

/home/stlee/leelib/net/getip.c -->lee_newip()開始
ppp0設備已啟動現正重新取得IP(原IP為 122.123.136.110 )
ppp0設備已重新取得IP為 122.123.142.142
ppp1設備已啟動現正重新取得IP(原IP為 122.123.140.116 )
ppp1設備已重新取得IP為 122.123.134.215
/home/stlee/leelib/net/getip.c -->lee_newip()結束
lee_runnewip()---->開始
k=0 /sbin/ip rule add pref 10 from 122.123.142.142 table 10
k=0 /sbin/ip rule add pref 20 from 122.123.134.215 table 20

Cannot find device "122.123.142.142"
k=256 /sbin/ip route replace default nexthop dev 122.123.142.142
Cannot find device "122.123.134.215"
k=256 /sbin/ip route replace default nexthop dev 122.123.134.215

lee_runnewip()---->結束
使用IP:122.123.142.142 備用IP=122.123.134.215
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共2次
333 使用者已離線 fd=4
使用IP:122.123.142.142 備用IP=122.123.134.215
伺服器等待中:與使用者通訊(已接到使用者傳來的資料)共3次

k的傳回值為256應該不是成功的,但卻沒發生error

但我都還會先用另一行程以ifconfig查看:
代碼: [選擇]

[root@localhost root]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:C0:26:6C:EE:18
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:611 errors:0 dropped:0 overruns:0 frame:0
          TX packets:598 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:66917 (65.3 Kb)  TX bytes:71434 (69.7 Kb)
          Interrupt:9 Base address:0xc000

eth0:0    Link encap:Ethernet  HWaddr 00:C0:26:6C:EE:18
          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:30 (30.0 b)  TX bytes:30 (30.0 b)
          Interrupt:9 Base address:0xc000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:733 errors:0 dropped:0 overruns:0 frame:0
          TX packets:733 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:50019 (48.8 Kb)  TX bytes:50019 (48.8 Kb)

ppp0      Link encap:Point-to-Point Protocol
          inet addr:122.123.142.142  P-t-P:122.123.128.254  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:30 (30.0 b)  TX bytes:30 (30.0 b)

ppp1      Link encap:Point-to-Point Protocol
          inet addr:122.123.134.215  P-t-P:122.123.128.254  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:30 (30.0 b)  TX bytes:30 (30.0 b)

[root@localhost root]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:C0:26:6C:EE:18
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:848 errors:0 dropped:0 overruns:0 frame:0
          TX packets:833 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:174159 (170.0 Kb)  TX bytes:97290 (95.0 Kb)
          Interrupt:9 Base address:0xc000

eth0:0    Link encap:Ethernet  HWaddr 00:C0:26:6C:EE:18
          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:27 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:1224 (1.1 Kb)  TX bytes:30 (30.0 b)
          Interrupt:9 Base address:0xc000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:3431 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3431 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:234122 (228.6 Kb)  TX bytes:234122 (228.6 Kb)

ppp0      Link encap:Point-to-Point Protocol
          inet addr:122.123.137.26  P-t-P:122.123.128.254  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:55 errors:0 dropped:0 overruns:0 frame:0
          TX packets:79 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:2332 (2.2 Kb)  TX bytes:3342 (3.2 Kb)

ppp1      Link encap:Point-to-Point Protocol
          inet addr:122.123.139.66  P-t-P:122.123.128.254  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:27 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:1224 (1.1 Kb)  TX bytes:30 (30.0 b)


請注意第一次以ifconfig出現的(ppp0,ppp1)IP是與程式取得的相同,然後用另一台ping也通
(可是ppp1的不通)然後在server端再用ifconfig看時ppp0,ppp1的IP卻與之前的不同了???(cli端ping後)
如此一來變成有一個不會通(以前也發生過這種現象-以ifconfig查看兩次IP不同-但未記錄)

多抓幾個ppp的問題,小弟目前只有4個能運用,
一台xp要看資料,一台server抓2個,一台clinet抓一個
不過函數倒是寫成能抓無限個的了啦
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #45 於: 2007-03-05 17:13 »
剛剛用man -K SIOCGIFADDR找到一個sockios.h檔,裡面東西滿有趣(英文差看不太懂)

關於註解的部份很像有很多種addrs(addr就是IP的字串型態名稱)可以去取得,
能請英文好一點的翻譯一下嗎?
這應該是ioctl()的參數(說不定是ifconfig背後的其中一隻黑手)
http://phorum.study-area.org/viewtopic.php?t=44162

sockios.h內容如下(請翻譯 /*xxxxx*/ 中的註解即可):
代碼: [選擇]

#define _LINUX_SOCKIOS_H

#include <asm/sockios.h>

/* Linux-specific socket ioctls */
#define SIOCINQ         FIONREAD
#define SIOCOUTQ        TIOCOUTQ

/* Routing table calls. */
#define SIOCADDRT       0x890B          /* add routing table entry      */
#define SIOCDELRT       0x890C          /* delete routing table entry   */
#define SIOCRTMSG       0x890D          /* call to routing system       */

/* Socket configuration controls. */
#define SIOCGIFNAME     0x8910          /* get iface name               */
#define SIOCSIFLINK     0x8911          /* set iface channel            */
#define SIOCGIFCONF     0x8912          /* get iface list               */
#define SIOCGIFFLAGS    0x8913          /* get flags                    */
#define SIOCSIFFLAGS    0x8914          /* set flags                    */
#define SIOCGIFADDR     0x8915          /* get PA address               */
#define SIOCSIFADDR     0x8916          /* set PA address               */
#define SIOCGIFDSTADDR  0x8917          /* get remote PA address        */
#define SIOCSIFDSTADDR  0x8918          /* set remote PA address        */
#define SIOCGIFBRDADDR  0x8919          /* get broadcast PA address     */
#define SIOCSIFBRDADDR  0x891a          /* set broadcast PA address     */
#define SIOCGIFNETMASK  0x891b          /* get network PA mask          */
#define SIOCSIFNETMASK  0x891c          /* set network PA mask          */
#define SIOCGIFMETRIC   0x891d          /* get metric                   */
#define SIOCSIFMETRIC   0x891e          /* set metric                   */
#define SIOCGIFMEM      0x891f          /* get memory address (BSD)     */
#define SIOCSIFMEM      0x8920          /* set memory address (BSD)     */
#define SIOCGIFMTU      0x8921          /* get MTU size                 */
#define SIOCSIFMTU      0x8922          /* set MTU size                 */
#define SIOCSIFNAME     0x8923          /* set interface name */
#define SIOCSIFHWADDR   0x8924          /* set hardware address         */
#define SIOCGIFENCAP    0x8925          /* get/set encapsulations       */
#define SIOCSIFENCAP    0x8926
#define SIOCGIFHWADDR   0x8927          /* Get hardware address         */
#define SIOCGIFSLAVE    0x8929          /* Driver slaving support       */
#define SIOCSIFSLAVE    0x8930
#define SIOCADDMULTI    0x8931          /* Multicast address lists      */
#define SIOCDELMULTI    0x8932
#define SIOCGIFINDEX    0x8933          /* name -> if_index mapping     */
#define SIOGIFINDEX     SIOCGIFINDEX    /* misprint compatibility :-)   */
#define SIOCSIFPFLAGS   0x8934          /* set/get extended flags set   */
#define SIOCGIFPFLAGS   0x8935
#define SIOCDIFADDR     0x8936          /* delete PA address            */
#define SIOCSIFHWBROADCAST      0x8937  /* set hardware broadcast addr  */
#define SIOCGIFCOUNT    0x8938          /* get number of devices */

#define SIOCGIFBR       0x8940          /* Bridging support             */
#define SIOCSIFBR       0x8941          /* Set bridging options         */

#define SIOCGIFTXQLEN   0x8942          /* Get the tx queue length      */
#define SIOCSIFTXQLEN   0x8943          /* Set the tx queue length      */

#define SIOCGIFDIVERT   0x8944          /* Frame diversion support */
#define SIOCSIFDIVERT   0x8945          /* Set frame diversion options */

#define SIOCETHTOOL     0x8946          /* Ethtool interface            */

#define SIOCGMIIPHY     0x8947          /* Get address of MII PHY in use. */
#define SIOCGMIIREG     0x8948          /* Read MII PHY register.       */
#define SIOCSMIIREG     0x8949          /* Write MII PHY register.      */

/* ARP cache control calls. */
                    /*  0x8950 - 0x8952  * obsolete calls, don't re-use */
#define SIOCDARP        0x8953          /* delete ARP table entry       */
#define SIOCGARP        0x8954          /* get ARP table entry          */
#define SIOCSARP        0x8955          /* set ARP table entry          */

/* RARP cache control calls. */
#define SIOCDRARP       0x8960          /* delete RARP table entry      */
#define SIOCGRARP       0x8961          /* get RARP table entry         */
#define SIOCSRARP       0x8962          /* set RARP table entry         */

/* Driver configuration calls */

#define SIOCGIFMAP      0x8970          /* Get device parameters        */
#define SIOCSIFMAP      0x8971          /* Set device parameters        */

/* DLCI configuration calls */

#define SIOCADDDLCI     0x8980          /* Create new DLCI device       */
#define SIOCDELDLCI     0x8981          /* Delete DLCI device           */

#define SIOCGIFVLAN     0x8982          /* 802.1Q VLAN support          */
#define SIOCSIFVLAN     0x8983          /* Set 802.1Q VLAN options      */

/* bonding calls */

#define SIOCBONDENSLAVE 0x8990          /* enslave a device to the bond */
#define SIOCBONDRELEASE 0x8991          /* release a slave from the bond*/
#define SIOCBONDSETHWADDR      0x8992   /* set the hw addr of the bond  */
#define SIOCBONDSLAVEINFOQUERY 0x8993   /* rtn info about slave state   */
#define SIOCBONDINFOQUERY      0x8994   /* rtn info about bond state    */
#define SIOCBONDCHANGEACTIVE   0x8995   /* update to a new active slave */

/* Device private ioctl calls */

/*
 *      These 16 ioctls are available to devices via the do_ioctl() device
 *      vector. Each device should include this file and redefine these names
 *      as their own. Because these are device dependent it is a good idea
 *      _NOT_ to issue them to random objects and hope.
 *
 *      THESE IOCTLS ARE _DEPRECATED_ AND WILL DISAPPEAR IN 2.5.X -DaveM
 */

#define SIOCDEVPRIVATE  0x89F0  /* to 89FF */

/*
 *      These 16 ioctl calls are protocol private
 */



萬分感謝!! :D
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
浮動IP的server只有一個會通的問題
« 回覆 #46 於: 2007-03-05 18:25 »
如果你想知道用 c 怎麼取得你要的資訊. 請直接去看 ifconfig 的 source code 吧. 裡頭應該你想要的功能都有吧.

如果你只是想設定這些東西, 請學著用 shell 指令, 加上現有的一些 user space 的程式去做, 不要老是想寫程式去動 kernel space 或取代那些 user space 程式的功能.

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #47 於: 2007-03-05 19:06 »
引述: "twu2"
如果你想知道用 c 怎麼取得你要的資訊. 請直接去看 ifconfig 的 source code 吧. 裡頭應該你想要的功能都有吧.

如果你只是想設定這些東西, 請學著用 shell 指令, 加上現有的一些 user space 的程式去做, 不要老是想寫程式去動 kernel space 或取代那些 user space 程式的功能.


感謝前輩的教誨:

小弟除了[知其然]更想[知其所以然]

且小弟本身程度並不是很好,尤其英文能力更差,所以如何取得資訊

除了看書就是問,所以如有所冒犯或亵瀆請原諒,謝謝您
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #48 於: 2007-03-06 15:01 »
今天開機後又發現有一個IP不通,想起dark大大提到的第二個方法中關於多IP設定的部份
決定做以下測試(還沒使用dark大大提供的方法前)

1.開機後第一次以一般使用者登入ppp0可通ppp1不通
2.重開機後第一次以root登入ppp0,ppp1可通
3.重開機後第一次以一般使用者登入ppp0可通ppp1不通,登出一般使用者再以root登入ppp0可通ppp1不通
4.重開機後第一次以root登入ppp0,ppp1可通,登出root後再以一班使用者登入ppp0,ppp1可通

這也證明了啟動多個 ppp 連線只編輯 ifcfg-xxxX 是不夠的(第一次登入只能以root登入)

現在將測試dark大大提到的第二個方法:
代碼: [選擇]

執行一次 adsl-start 後編輯出來的 pppoe.conf 檔案 (vi 可改使用哪張卡)
將他複製到 /tmp 試試
cp pppoe.conf /tmp/01pppoe.conf ; adsl-atsrt /tmp/01pppoe.conf
cp pppoe.conf /tmp/02pppoe.conf ; adsl-atsrt /tmp/02pppoe.conf
引入的路徑重複才會被視為 "介面已連線"
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #49 於: 2007-03-06 15:45 »
報告:出現這個訊息

[root@localhost configs]# adsl-atsrt /tmp/01pppoe.conf
bash: adsl-atsrt: command not found
[root@localhost configs]#

大大可能筆誤adsl-atsrt....應為adsl-start

執行後約30秒停頓後出現此訊息(英文程度差,但按經驗來說應該是成功的)
代碼: [選擇]

[root@localhost configs]# adsl-start /tmp/01pppoe.conf
/sbin/adsl-start: line 215:  3996 Terminated              $CONNECT "$@" >/dev/null 2>&1

然後以vi查看複製到/tmp的01pppoe.conf及01pppoe.conf後(本檔註解詳細但.....都是英文><")
發現第一個參數ETH=eth1
想想..我沒有eth1啊,所以將01pppoe.conf改成eth0而02pppoe.conf則改成eth0:0

再執行adsl-start /tmp/01pppoe.conf及adsl-start /tmp/02pppoe.conf

(老婆叫我去店裡煮紅茶><",煮完回來再試)
.....
.....
執行後各別出現以下訊息
代碼: [選擇]

[root@localhost tmp]# adsl-start /tmp/01pppoe.conf
/sbin/adsl-start: line 215:  3900 Terminated              $CONNECT "$@" >/dev/null 2>&1
[root@localhost tmp]# adsl-start /tmp/02pppoe.conf
/sbin/adsl-start: line 215:  4329 Terminated              $CONNECT "$@" >/dev/null 2>&1
[root@localhost tmp]#


再以下午的方法測一遍
咦 !!!有沒有眼花@@~*   再調回去,沒錯...

1.開機後第一次以一般使用者登入ppp0,ppp1可通
2.重開機後第一次以root登入ppp0,ppp1可通
3.重開機後第一次以一般使用者登入ppp0,ppp1可通
... 登出一般使用者再以root登入時以ifconfig指令查看時ppp界面不見了,只有ethx及lo
介面@@~*不死心再把步驟重做一遍...卻變成一般使用者登入時ppp0不通(剛剛有通阿,
開始懷疑是我沒把之前在ifcfg-xxx設定先排除造成干擾)...在做一次...一般使用者登入
又雙通,好!再登出以root登入看看@@~*我剛才一定是看到耶穌了ppp介面出來了也可雙
通@@~*可能剛才登入進來時很快就以ifconfig指令去查看IP(這樣做有時會發生下兩次
指令出現未登出或重開機情形下有兩次不同IP不知道是不是這原因呢)不管如何,證明此
次可行了
4.重開機後第一次以root登入ppp0居然不通了(越來越懷疑是干擾了)再把步驟做一次
.....這次換ppp1不通了T_T...第3次先從椅子上起身對電腦拜一下...PPP介面沒看到...



請問我有多做或少做了什麼嗎???



pppoe.conf路徑所在:/usr/share/doc/rp-pppoe-3.5/configs
作業系統:RedHat-9.0
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #50 於: 2007-03-06 22:17 »
剛剛不斷看自己的紀錄後發現一些盲點

1.在/etc/rc.local的啟動指令是ifup ppp0,ifup eth0:0,ifup ppp1
2.以adsl-start /tmp/01pppoe.conf是指定的路徑
3.為何剛開始三次都ok但第三次的登出再登入以後出現問題
4.是否可透過修改/etc/rc.local的啟動指令為
adsl-start /tmp/01pppoe.conf
adsl-start /tmp/02pppoe.conf
5.第一次以vi開啟pppoe.conf的時候其ETH=參數竟指向並不存在的eth1而先前卻都可行

先把想法寫下來明天才能再試了(等一下要去收店)
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
浮動IP的server只有一個會通的問題
« 回覆 #51 於: 2007-03-06 22:37 »
指令的說明, man 上頭都有吧.

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #52 於: 2007-03-07 00:31 »
引述: "twu2"
指令的說明, man 上頭都有吧.


非常不好意思 :oops: 小弟..............看不懂
所以只能土法煉鋼了 :oops:
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #53 於: 2007-03-07 22:33 »
將之前/etc/rc.local的啟動指令
ifup ppp0
ifup eth0:0
ifup ppp1
修改成
adsl-start /tmp/01pppoe.conf
ifup eth0:0
adsl-start /tmp/02pppoe.conf

進行測試:
1.開機後第一次以一般使用者登入ppp0,ppp1可通,登出一般使用者再以root登入pp0,ppp1可通
2.重開機後第一次以root登入ppp0可通ppp1不通,登出root後再以一般使用者登入pp0可通ppp1不通

情形完全顛倒過來了:一般使用者可雙通,但root反而只能通一個 :lol:  :lol:  :lol:
雖然開機第一次即以root登入有的時候可以雙通,但不列入紀錄


剛剛是修改,現在是加入etc/rc.local的啟動指令變成這樣
adsl-start /tmp/01pppoe.conf
adsl-start /tmp/02pppoe.conf
ifup ppp0
ifup eth0:0
ifup ppp1

進行測試:
1.開機後第一次以一般使用者登入ppp0,ppp1可通,登出一般使用者再以root登入pp0,ppp1可通
2.重開機後第一次以root登入ppp0,ppp1可通,登出root後再以一般使用者登入ppp0,ppp1可通

請注意:在此次測試中
adsl-start /tmp/01pppoe.conf及adsl-start /tmp/02pppoe.conf
必須在上面;如果像這樣
ifup ppp0
ifup eth0:0
ifup ppp1
adsl-start /tmp/01pppoe.conf
adsl-start /tmp/02pppoe.conf
也是會在以root登入時發生有一個不通的情形,為何會這樣其實在開機畫面時就有線索了
因為加入這兩條指令後開機的最後會有這樣的訊息
代碼: [選擇]

/sbin/adsl-start: line 215:  3996 Terminated              $CONNECT "$@" >/dev/null 2>&1
/sbin/adsl-start: line 215:  3996 Terminated              $CONNECT "$@" >/dev/null 2>&1

(因為我抓的是兩個IP)所以這一條指令應該是影響使用者開機第一次登入是否可雙通,
而ifup pppx則影響開機第一次以root登入了
而為什麼放在後面有時會影響??猜想是因為adsl-start是直接傳參數給程式,而ifup則是
一個集合指令,所以先下集合指令相當n+1個指令.而在前面則後面的ifup應可辨別出來前
面下過指令了所以只執行1+(n-1)個

還有/usr/share/doc/rp-pppoe-3.5/configs/pppoe.conf也把裡面的ETH=eth1
改成ETH=eth0了

呼~~~好累(:lol: Linux真好玩:lol:)
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

kuolung

  • 俺是博士!
  • *****
  • 文章數: 1031
    • 檢視個人資料
    • http://www.kuolung.net
浮動IP的server只有一個會通的問題
« 回覆 #54 於: 2007-03-07 22:54 »
對不起,我覺得您好像跑錯方向了,也許重新思考一下,您的目的是什麼
=========================
http://www.kuolung.net
==========================

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
浮動IP的server只有一個會通的問題
« 回覆 #55 於: 2007-03-08 02:45 »
引述: "kuolung"
對不起,我覺得您好像跑錯方向了,也許重新思考一下,您的目的是什麼

小弟當然不會忘記目的,但在程式寫作前的資料收集,以及使用環境的測試遠比程式寫作本身
更加的重要,如果只是定個主題然後開始寫,可預見的將是抓蟲的地獄
但先將外部環境的各種因素給予測試過一遍後,除能使自己了解將在何環境下工作
也能對系統本身有更加的認識

這陣子承蒙您(及各位大大)的幫助,使得小弟從一個對Linux網路環境完全的門外漢
到至少能給它玩一玩不會摸不著頭緒,當然還有更多更多的[眉角]是小弟要更加去學習的,不
過這樣摸一遍下來以後至少不像之前完全沒概念就妄想去寫網路的程式了

謝謝這段期間熱心幫助的大大們(族繁不及備載...族繁 :o ?)


ps.之前(去年)小弟有寫一個看檔程式,曾被權限問題搞到快往生,所以對權限問題可是很敏感的 :D
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼