欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

基于Python Shell獲取hostname和fqdn釋疑

系統 1861 0

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

一、設置hostname/fqdn

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

$ hostname florian

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

            
$ cat /etc/hosts
127.0.0.1 localhost
192.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/network
NETWORKING=yes
HOSTNAME=test.com
          

二、查看hostname/fqdn

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

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

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

            
$ ping florian
PING florian.test.com (192.168.1.1) 56(84) bytes of data.
$ ping florian.test.com
PING 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 linux2
Type "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 -f
192.168.1.1
192.168.1.1 
          

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

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

            
$ 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 linux2
Type "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/hosts
127.0.0.1 localhost
# 192.168.1.1 florian.test.com florian 
          

刷新dns緩存:

$ service nscd reload

我們發現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 linux2
Type "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/hosts
127.0.0.1 localhost
192.168.1.1 192.168.1.1 
          

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

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

利用 socket 模塊 里的 gethostbyname 函數

            
              >>> import 
              
                socket
              
               >>> 
              
                socket
              
              .
              
                gethostbyname
              
              (
              
                "www.baidu.com"
              
              ) 
              
                '61.135.169.125'
              
               >>> 
              
                socket
              
              .
              
                gethostbyname
              
              (
              
                "rs.xidian.edu.cn"
              
              ) 
              
                '202.117.119.1'
              
            
            
  • 1
  • 2
  • 3
  • 4
  • 5

方法2 利用 shell 中 hostname 命令

            
              def getHostName(ip): 
              
                
                  command
                
                 = 
                
                  'java -jar %s %s "hostname > %s.hostname"'
                
                 %(
                
                  remoteCmdLoca
                
                ,
                
                  ip
                
                ,
                
                  ip
                
                )
              
              
                result
              
               = subprocess.call(
              
                
                  command
                
                , 
                
                  shell
                
                =
                
                  True
                
                )
              
              
                
                  command
                
                 = 
                
                  '%s -q -r -pw Sybase123 %s root@%s:/root'
                
                 % (
                
                  pscpLoca
                
                , 
                
                  pscpLoca
                
                , 
                
                  ip
                
                )
              
              
                result
              
               = subprocess.call(
              
                
                  command
                
                , 
                
                  shell
                
                =
                
                  True
                
                )
              
              
                
                  command
                
                 = 
                
                  '%s -q -r -pw Sybase123 root@%s:/root/%s.hostname %s'
                
                 %(
                
                  pscpLoca
                
                ,
                
                  ip
                
                ,
                
                  ip
                
                ,
                
                  sumAutoLoca
                
                )
              
              
                result
              
               = subprocess.call(
              
                
                  command
                
                , 
                
                  shell
                
                =
                
                  True
                
                )
              
               fileName = sumAutoLoca + ip + 
              
                '.hostname'
              
               readFile = 
              
                open
              
              (fileName,
              
                'r'
              
              ) hostnameInfo = str(readFile.readline().strip(
              
                '\n'
              
              )) readFile.
              
                close
              
              () subprocess.call(
              
                'rm '
              
              + fileName, 
              
                shell
              
              =True) print 
              
                "=========%s hostname is %s========"
              
               %(ip,hostnameInfo) 
              
                return
              
               hostnameInfo
            
            
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

設計思路 ##

有時候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 命令把遠程機器和本地的文本文件都刪除


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美a级成人淫片免费看 | 丝袜天堂 | 久久久久久网站 | 国产999在线 | 久久国产精品视频 | 荷兰欧美一级毛片 | 欧美欲妇激情视频在线 | 三级黄色片在线免费观看 | 很黄很色的小视频在线网站 | 亚洲精品一区二区三区在线看 | 三级a做爰大乳在线观看 | 亚洲成人小视频 | 国产精品欧美一区二区三区 | 日日操夜夜操天天操 | 日韩在线欧美 | 欧美激情一区二区三级高清视频 | 91在线入口 | α片毛片 | 太平公主一级艳史播放高清 | 久久亚洲国产精品五月天婷 | 五月天婷婷网站 | 亚洲国产精品热久久 | 奇米线在人线免费视频 | 国产gav成人免费播放视频 | 一区二区三区毛片 | 99精品电影 | 91久久精品一区二区二区 | 国产视频在线看 | 亚洲狠狠婷婷综合久久蜜桃 | 91久久国产精品 | 四虎影视在线看免费完整版 | 欧美视频二区 | 一区视频| 日日a.v拍夜夜添久久免费 | 超碰97av| 久久国产精品一区二区 | 欧美日韩精品一区二区三区 | 免费能直接在线观看黄的视频 | a级毛片免费高清视频 | 波多野结衣办公室33分jian情 | 91在线 | 欧美|