通過腳本自動(dòng)獲取公網(wǎng)IP

起因

(此處廢話,建議直接跳下一主題)
家里買了一臺(tái)NAS之后一直想通過公網(wǎng)訪問自己的內(nèi)網(wǎng)浆熔。本辐。。但是医增。慎皱。。

自從報(bào)裝了聯(lián)通寬帶就因?yàn)闊o法得到公網(wǎng)IP而一直和聯(lián)通客戶周旋叶骨,打了好多客服電話茫多,又遷了線路。忽刽。天揖。最后終于也只是爭取到一條 IP一直在公網(wǎng)與內(nèi)網(wǎng)波動(dòng)的動(dòng)態(tài)IP線路」虻郏客服曰:公網(wǎng)IP不夠今膊,根據(jù)總公司規(guī)定能否獲得公網(wǎng)IP只能是靠程(運(yùn))序(氣)自動(dòng)分配。

雖然萬般無奈伞剑,可是雖讓我已經(jīng)交錢了而且也心力交瘁不想再和客服周旋了斑唬。所以只能勉強(qiáng)接受這個(gè)折中的方案。
然而問題來了黎泣,運(yùn)氣好獲得公網(wǎng)IP的話我自然能夠通過DDNS來在外網(wǎng)訪問我的內(nèi)網(wǎng)恕刘。但是如果我運(yùn)氣不好得到內(nèi)網(wǎng)IP呢?

既然問題來了抒倚,那就解決問題褐着,總共有以下這么多問題需要解決:

  1. 了解聯(lián)通寬帶獲取IP的情況是怎樣的?如何可以獲取公網(wǎng)IP托呕?
  2. 如何一直獲取公網(wǎng)IP含蓉?

通過不斷的折騰我的路由器終于發(fā)現(xiàn)了洋访,聯(lián)通獲取IP的機(jī)制就是每次路由器重啟或者端口重啟都會(huì)隨機(jī)獲取一個(gè)公網(wǎng)或者內(nèi)網(wǎng)IP。而是否公網(wǎng)全靠運(yùn)氣谴餐,而且獲得內(nèi)網(wǎng)IP的情況遠(yuǎn)多于獲取公網(wǎng)IP的情況姻政。
然而最要命的事你獲得一個(gè)公網(wǎng)IP之后并不是一直就能持有該IP,而已會(huì)每個(gè)一段時(shí)間刷新IP岂嗓,間隔大概是一天汁展。

那現(xiàn)在知道了寬帶獲取IP的機(jī)制了,那么如何保證路由器一直獲取公網(wǎng)IP呢厌殉?
最笨的方法就是一直重啟路由器或者端口知道你獲得一個(gè)公網(wǎng)IP食绿。
或者寫個(gè)腳本自動(dòng)判斷IP并獲取公網(wǎng)IP。

作為能躺著絕對(duì)不會(huì)坐著的IT工(死)程(肥)師(宅)當(dāng)然是選擇讓程序自己來做這個(gè)粗活啦公罕。器紧。。
說干就干楼眷。铲汪。。

處理思路

讀取端口IP → 讀取本地寬帶公網(wǎng)IP → 端口IP≠公網(wǎng)IP 則重啟端口罐柳,直到端口IP=公網(wǎng)IP

讀取端口IP

因?yàn)槲业穆酚善魇莖penwrt系統(tǒng)的掌腰,所以可以通過命令ifstatus wan來查看我設(shè)備端口IP。

查看IP信息
ifstatus wan

root@NETGEAR:/mnt# ifstatus wan
{
    "up": true,
    "pending": false,
    "available": true,
    "autostart": true,
    "dynamic": false,
    "uptime": 21255,
    "l3_device": "pppoe-wan",
    "proto": "pppoe",
    "device": "eth0.2",
    "updated": [
        "addresses",
        "routes"
    ],
    "metric": 0,
    "dns_metric": 0,
    "delegation": true,
    "ipv4-address": [
        {
            "address": "120.85.165.134",
            "mask": 32,
            "ptpaddress": "120.85.164.1"
        }
    ],
    (张吉。齿梁。。中間去掉好多無用文本肮蛹。勺择。。)

    }
}

提取IP所在的行
因?yàn)镮P的字符串在第20行
ifstatus wan | awk '{if (NR==20) print}'

root@NETGEAR:/mnt# ifstatus wan | awk '{if (NR==20) print}'
            "address": "120.85.165.134",

去掉多余字符
因?yàn)槲抑挥袉为?dú)的IP字段伦忠,雙引號(hào)也不要省核。所以我們可以用雙引號(hào)來分割字符,分割之后讀取第4端字符串缓苛。
ifstatus wan | awk -F '"' '{if (NR==20) print $4}'

root@NETGEAR:/mnt# ifstatus wan | awk -F '"' '{if (NR==20) print $4}'
120.85.165.134

讀取公網(wǎng)IP

網(wǎng)上可以收到很多查詢本地公網(wǎng)IP的URL芳撒,我網(wǎng)上查到了好幾個(gè)
獲取外網(wǎng)ip信息的:
curl icanhazip.com
curl trackip.net/ip
curl iiip.co
curl ifconfig.me

最后發(fā)現(xiàn)在我的環(huán)境ifconfig.me這個(gè)網(wǎng)址最快邓深,所以就使用他了未桥。
curl ifconfig.me

開關(guān)端口IP

打開WAN端口
ifup wan
關(guān)閉WAM端口
ifdown wan

腳本源碼

#!/bin/bash
#Restart the interface wan until get the global address
#by Huangxiaosong

while true
do
globalAdd=$(curl icanhazip.com)   #讀取公網(wǎng)IP,賦值給變量globalAdd
echo "globalAdd:" $globalAdd
wanAdd=$(ifstatus wan | awk -F '"' '{if (NR==19) print $4}')  #讀取端口IP芥备,賦值給變量wanAdd

if [ -z "$wanAdd" ]   #判斷 $wanAdd 是否為空冬耿,因?yàn)樽x取IP的時(shí)候有時(shí)候讀出來的文本,IP在19行萌壳,有時(shí)候在20行亦镶,因此這里做一個(gè)判斷日月,如果19行讀不到IP就讀20行。
then
    wanAdd=$(ifstatus wan | awk -F '"' '{if (NR==20) print $4}')
    echo $wanAdd
fi
echo "wanAdd:" $wanAdd

if [ $globalAdd != $wanAdd ]  #如果查詢到的公網(wǎng)IP不等于WAN口IP缤骨,說明路由器獲取的IP是聯(lián)通內(nèi)網(wǎng)IP爱咬。那么就重啟WAN口。
then
    ifdown wan
    echo "ifdown wan"
    sleep 1
    ifup wan
    echo "ifup wan ..."
    sleep 7
else
    echo "Well done! you get the global address!"
    echo "wait 15 min !"
    sleep 900     #這里等等15分鐘后繼續(xù)循環(huán)執(zhí)行程序绊起。
fi

done

后記

開源路由器的確不錯(cuò)精拟,本身具備了和linux一樣的腳本控制能力。所以可以方便的實(shí)現(xiàn)路由器的控制虱歪,包括腳本自動(dòng)化蜂绎。如果是一般的家用路由器的話。那么估計(jì)就要費(fèi)一番心思去讓python來去web端操作了笋鄙。那不知道要復(fù)雜多少倍师枣。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市萧落,隨后出現(xiàn)的幾起案子践美,更是在濱河造成了極大的恐慌,老刑警劉巖找岖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拨脉,死亡現(xiàn)場離奇詭異,居然都是意外死亡宣增,警方通過查閱死者的電腦和手機(jī)玫膀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爹脾,“玉大人帖旨,你說我怎么就攤上這事×榉粒” “怎么了解阅?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長泌霍。 經(jīng)常有香客問我货抄,道長,這世上最難降的妖魔是什么朱转? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任蟹地,我火速辦了婚禮,結(jié)果婚禮上藤为,老公的妹妹穿的比我還像新娘怪与。我一直安慰自己,他們只是感情好缅疟,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布分别。 她就那樣靜靜地躺著遍愿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耘斩。 梳的紋絲不亂的頭發(fā)上沼填,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音括授,去河邊找鬼倾哺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛刽脖,可吹牛的內(nèi)容都是我干的羞海。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼曲管,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼却邓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起院水,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤腊徙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后檬某,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撬腾,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年恢恼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了民傻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡场斑,死狀恐怖漓踢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情漏隐,我是刑警寧澤喧半,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站青责,受9級(jí)特大地震影響挺据,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脖隶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一扁耐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浩村,春花似錦做葵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怎燥,卻和暖如春瘫筐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铐姚。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國打工策肝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人隐绵。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓之众,卻偏偏與公主長得像,于是被迫代替她去往敵國和親依许。 傳聞我的和親對(duì)象是個(gè)殘疾皇子棺禾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • [TOC] 遠(yuǎn)程訪問(公網(wǎng)IP-DDNS方式) 寬帶有公網(wǎng)IP的前提下,使用DDNS的方式相比于內(nèi)網(wǎng)穿透的方式要更...
    qinkangdeid閱讀 30,018評(píng)論 2 2
  • 家里升級(jí)了電信200M寬帶峭跳,上行也提高到了20M膘婶,原來的百兆路由器已經(jīng)不能滿足需要了,經(jīng)過一番比較最終入手了華碩A...
    0晨鶴0閱讀 207,573評(píng)論 19 138
  • 蝦是一種營養(yǎng)價(jià)值非常高的食物蛀醉,很多人都很喜歡吃悬襟。炸蝦就是最受歡迎的其中一種,因?yàn)檎ㄎr的做法大全家常比較簡單拯刁,一學(xué)就...
    萬味林凈菜閱讀 825評(píng)論 0 1
  • 前段時(shí)間脊岳,在湖南衛(wèi)視春晚上,發(fā)生一幕尷尬的局面垛玻,杜海濤在念贊助商時(shí)逸绎,開口說:“我們的贊助商是有著百年歷史的招商銀行...
    毛毛蟲的愿望閱讀 2,628評(píng)論 0 1
  • 秦始皇帝陵博物院中的兵馬俑是古城游覽的重頭戲,它果真不負(fù)世界第八大奇跡的稱號(hào)夭谤。長方形的一號(hào)坑棺牧,其恢弘與浩大強(qiáng)烈地沖...
    蘭芷之汀閱讀 140評(píng)論 0 0