亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

基于Python Shell獲取hostname和fqdn釋疑

2020-01-04 17:48:49
字體:
來源:轉載
供稿:網友
一直以來被linux的hostname和fqdn(Fully Qualified Domain Name)困惑著,今天通過VEVB武林網平臺把它們使用細節弄清分享給大家
 

一直以來被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天專門抽時間把它們的使用細節弄清了。

一、設置hostname/fqdn

在Linux系統內設置hostname很簡單,如:

$ hostname florian

如果要設置fqdn的話,需要對/etc/hosts進行配置。

$ cat /etc/hosts127.0.0.1 localhost192.168.1.1 florian.test.com florian 

/etc/hosts配置文件的格式是:

ip fqdn [alias]...

即第一列為主機ip地址,第二列為主機fqdn地址,第三列以后為別名,可以省略,否則至少要包含hostname。

上述配置文件的配置項的第一行為localhost的配置,第二行為主機名florian配置fqdn=florian.test.com,ip=192.168.1.1。
至于fqdn的域名后綴,最好和文件/etc/sysconfig/network的HOSTNAME配置保持一致:

$ cat /etc/sysconfig/networkNETWORKING=yesHOSTNAME=test.com

二、查看hostname/fqdn

配置完成后,可以使用shell命令查看hostname和fqdn:

$ hostname && hostname -f florianflorian.test.com 

使用ping去測試hostname的ip映射是否成功。

$ ping florianPING florian.test.com (192.168.1.1) 56(84) bytes of data.$ ping florian.test.comPING florian.test.com (192.168.1.1) 56(84) bytes of data. 

也可以使用python命令獲取hostname和fqdn。

$ python Python 2.6.6 (r266:84292, Dec 7 2011, 20:48:22) [GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import socket>>> socket.gethostname()'florian'>>> socket.getfqdn() 'florian.test.com' 

三、使用ip設置hostname帶來的fqdn問題

以上描述了正常設置hostname和fqdn的方法,但是有時會使用ip地址直接作為hostname,此時會有些不同。

$ hostname 192.168.1.1$ hostname && hostname -f192.168.1.1192.168.1.1 

我們發現使用ip作為hostname后,使用shell命令查詢hostname和fqdn都是ip地址?。?!這是因為DNS協議會解析hostname的內容,當發現其為ip地址時,則不會再去查詢/etc/hosts文件。

再使用python查看一下,會發現python獲取的fqdn竟然還是florian.test.com!?。?/p>

$ pythonPython 2.6.6 (r266:84292, Dec 7 2011, 20:48:22) [GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import socket >>> socket.gethostname()'192.168.1.1'>>> socket.getfqdn()'florian.test.com' 

即便是刷新dns緩存也無濟于事:

$ service nscd reload

將/etc/hosts文件的第二行注釋:

cat /etc/hosts127.0.0.1 localhost# 192.168.1.1 florian.test.com florian 

刷新dns緩存:

$ service nscd reload

我們發現fqdn恢復正常了。

$ pythonPython 2.6.6 (r266:84292, Dec 7 2011, 20:48:22) [GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import socket >>> socket.gethostname()'192.168.1.1'>>> socket.getfqdn()'192.168.1.1' 

之所以會有這樣的行為,是因為python解析fqdn的邏輯和DNS并不完全一致,它會根據hostname查詢對應的ip地址,然后在/etc/hosts內獲取ip地址對應的配置行(第一行有效),然后解析fqdn列和alias列,并返回第一個包含字符'.'的對應列的值。

因此,使用ip設置hostname時,需要注意兩點:

•首先,將hostname設置為ip地址
•其次,將/etc/hosts內包含該ip的配置項移除

為了保險起見,我們可以在/etc/hosts內盡可能靠前的位置添加如下配置:

cat /etc/hosts127.0.0.1 localhost192.168.1.1 192.168.1.1 

這樣,即便是之后有包含該ip的配置項也不會生效,python會優先解析第二行的配置項,并獲取和ip地址完全一樣的fqdn地址。當然,使用shell命令hostname獲取fqdn也不會出錯,因為hostname已經被設為ip地址形式了。

下面給大家介紹python shell 根據ip 獲取 hostname || 根據hostname 獲取 ip

利用 socket 模塊 里的 gethostbyname 函數

<code class="hljs perl has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">>>> import <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">socket</span> >>> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">socket</span>.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">gethostbyname</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"www.baidu.com"</span>) <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'61.135.169.125'</span> >>> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">socket</span>.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">gethostbyname</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"rs.xidian.edu.cn"</span>) <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'202.117.119.1'</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>

方法2 利用 shell 中 hostname 命令

<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">def getHostName(ip): <span class="hljs-command" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">command</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'java -jar %s %s "hostname > %s.hostname"'</span> %(<span class="hljs-title" style="box-sizing: border-box;">remoteCmdLoca</span>,<span class="hljs-title" style="box-sizing: border-box;">ip</span>,<span class="hljs-title" style="box-sizing: border-box;">ip</span>)</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">result</span> = subprocess.call(<span class="hljs-command" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">command</span>, <span class="hljs-title" style="box-sizing: border-box;">shell</span>=<span class="hljs-title" style="box-sizing: border-box;">True</span>)</span> <span class="hljs-command" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">command</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'%s -q -r -pw Sybase123 %s root@%s:/root'</span> % (<span class="hljs-title" style="box-sizing: border-box;">pscpLoca</span>, <span class="hljs-title" style="box-sizing: border-box;">pscpLoca</span>, <span class="hljs-title" style="box-sizing: border-box;">ip</span>)</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">result</span> = subprocess.call(<span class="hljs-command" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">command</span>, <span class="hljs-title" style="box-sizing: border-box;">shell</span>=<span class="hljs-title" style="box-sizing: border-box;">True</span>)</span> <span class="hljs-command" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">command</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'%s -q -r -pw Sybase123 root@%s:/root/%s.hostname %s'</span> %(<span class="hljs-title" style="box-sizing: border-box;">pscpLoca</span>,<span class="hljs-title" style="box-sizing: border-box;">ip</span>,<span class="hljs-title" style="box-sizing: border-box;">ip</span>,<span class="hljs-title" style="box-sizing: border-box;">sumAutoLoca</span>)</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">result</span> = subprocess.call(<span class="hljs-command" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">command</span>, <span class="hljs-title" style="box-sizing: border-box;">shell</span>=<span class="hljs-title" style="box-sizing: border-box;">True</span>)</span> fileName = sumAutoLoca + ip + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'.hostname'</span> readFile = <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">open</span>(fileName,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'r'</span>) hostnameInfo = str(readFile.readline().strip(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'/n'</span>)) readFile.<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">close</span>() subprocess.call(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'rm '</span>+ fileName, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">shell</span>=True) print <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"=========%s hostname is %s========"</span> %(ip,hostnameInfo) <span class="hljs-constant" style="box-sizing: border-box;">return</span> hostnameInfo</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li></ul>

設計思路 ##

有時候socket不太穩定, 具體原因帶查明

目的: 根據 ip 獲取 hostname (適當改進也可逆轉)

先設計了一個遠程執行 ssh 命令jar, 或者可以用plink, 鏈接enter link description here

利用subprocess.call命令在遠程ip機器上執行hostname > %s.hostname命令, 將hostname 信息輸出到文件

用pscp將本地的pscp文件復制到遠程ip機器上 /root 目錄下(后來發現這步不需要)

然后利用本地的 pscp 將遠程機器上帶有hostname的文本文件/root/%s.hostname 復制到本地

利用 python 的文本讀取功能讀取信息, 從中取出hostname字符串

再利用 rm 命令把遠程機器和本地的文本文件都刪除


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品无人区乱码1区2区3区在线| 国语自产偷拍精品视频偷| 亚洲国产欧美在线成人app| 精品亚洲精品福利线在观看| 欧美日韩另类在线| 国产成人精品综合| 在线观看日韩专区| 国产成人精品视频在线| 一区二区亚洲欧洲国产日韩| 国产精品视频久久久久| 中文字幕日韩在线播放| 亚洲国产精品美女| 亚洲天堂成人在线| 性亚洲最疯狂xxxx高清| 久久精品91久久香蕉加勒比| 久久激情视频免费观看| 日本一区二区在线免费播放| 亚洲欧洲在线看| 国内精品一区二区三区四区| 欧美国产一区二区三区| 91色p视频在线| 日韩在线免费视频观看| 久久成人在线视频| 欧美另类极品videosbest最新版本| 日韩精品在线免费观看视频| 国模视频一区二区| 国产69精品久久久| 精品久久久久久久大神国产| 日韩欧美在线国产| 日韩av在线免费观看| 欧美日韩国产成人高清视频| 亚洲国产成人久久综合| 麻豆国产精品va在线观看不卡| 亚洲精品久久久久久久久久久久| 亚洲精品99999| 国内伊人久久久久久网站视频| 亚洲一二三在线| 不卡av在线播放| 伊人久久久久久久久久久久久| 亚洲成人久久一区| 久久久91精品| 中文精品99久久国产香蕉| 91精品国产综合久久久久久蜜臀| 欧美国产日韩xxxxx| 色妞欧美日韩在线| 国产日韩精品综合网站| 欧美高清无遮挡| 日韩在线不卡视频| 日韩亚洲欧美中文在线| 97国产精品免费视频| 精品中文字幕在线2019| 性欧美亚洲xxxx乳在线观看| 欧美激情网站在线观看| 91精品久久久久久久久久| 日韩视频在线免费观看| 日本高清视频精品| 国a精品视频大全| 色哟哟网站入口亚洲精品| 国产精品网址在线| 97视频在线观看亚洲| 秋霞成人午夜鲁丝一区二区三区| 欧美激情在线有限公司| 亚洲精品xxx| 亚洲欧美国产va在线影院| 久久免费观看视频| 亚洲天堂av综合网| 国产精品第七十二页| 久久精品欧美视频| 欧美一区二区.| 午夜精品久久久久久久99热浪潮| 欧美午夜精品在线| 久久躁狠狠躁夜夜爽| 最好看的2019年中文视频| 久久久精品一区二区三区| 亚洲精品久久久久| 国产精品69av| 欧美日韩电影在线观看| 成人欧美一区二区三区在线| 日韩av电影在线免费播放| 97高清免费视频| 欧美日韩亚洲视频| 色先锋资源久久综合5566| 九九久久久久99精品| 九九九热精品免费视频观看网站| 精品亚洲男同gayvideo网站| 全亚洲最色的网站在线观看| 91色精品视频在线| 国产日韩欧美日韩| 亚洲综合精品一区二区| 丝袜美腿亚洲一区二区| 欧美精品精品精品精品免费| 亚洲人成电影在线| 日韩男女性生活视频| 成人乱人伦精品视频在线观看| 久久久极品av| 日韩高清电影免费观看完整版| 久久久久亚洲精品| 裸体女人亚洲精品一区| 精品成人国产在线观看男人呻吟| 欧美成人免费一级人片100| 久久精品免费电影| 国产一级揄自揄精品视频| 色综合久久久久久中文网| 精品美女永久免费视频| 在线视频一区二区| 国产成人在线精品| 2023亚洲男人天堂| 亚洲片国产一区一级在线观看| 亚洲精品国产精品自产a区红杏吧| 亚洲美女又黄又爽在线观看| 日韩精品视频中文在线观看| 国产精品视频yy9099| 国产亚洲人成a一在线v站| 欧美电影免费播放| 国产精品久久久久久久久久东京| 亚洲黄色在线观看| 欧美激情第6页| 8090理伦午夜在线电影| 日本乱人伦a精品| 91免费国产网站| 亚洲免费电影一区| 国产区精品视频| 久久成人av网站| 日韩成人av一区| 成人精品久久av网站| 国内精品小视频| 日韩在线观看免费全集电视剧网站| 性欧美亚洲xxxx乳在线观看| 午夜欧美不卡精品aaaaa| 美日韩精品免费视频| 国产精品白丝av嫩草影院| 欧美电影免费播放| 欧美洲成人男女午夜视频| 日本一区二区三区在线播放| 久久久www成人免费精品张筱雨| 亚洲人成网站免费播放| 久久综合伊人77777蜜臀| 久久人人爽人人爽人人片av高请| 4438全国亚洲精品在线观看视频| 国产剧情日韩欧美| 欧美激情免费视频| 日韩av在线免费观看| 色在人av网站天堂精品| 色偷偷av亚洲男人的天堂| 日本韩国欧美精品大片卡二| 91精品成人久久| 国产精品wwww| 国产一区二区三区直播精品电影| 亚洲精品永久免费| 精品成人av一区| 国产精品欧美在线| 亚洲欧美日韩视频一区| 亚洲成人av在线播放| 青青精品视频播放| 亚洲精品自产拍| 91九色在线视频| 国产成人综合亚洲| 欧美日韩在线看| 久久精品国产视频| 亚洲美女性视频| 日韩视频在线免费| 成人在线观看视频网站| 国产精品久久久久久搜索| 91日本在线视频|