スベリミナル効果

技術的なことを書こうと思ってたけど何でも書くことにします


通常用

ふざけ用
何でもコメントください… 横長読みにくいとか…
ダジャレ好きの方はこちらにどうぞ→スベリブログ2.0

Linuxの端末に表示されるホスト名が勝手に変わったからちょっと調べてみた

ある日、Linux(CentOS7)の端末のプロンプト表示が急に変わりました。

いつもの

[hijili2@localhost ~]$

今さっき

[hijili2@Device-137595 ~]$

なんでやねんと思い軽く調べてみました。
その端末(顛末)を書いてみようと思います。(ある意味これが書ければこの記事はほぼ終わりの1スベリ)


まあ、一応確認する。

$ echo $PS1
[\u@\h \W]\$

うん、君がホストでよかった。(ここだけ抜き出して引用しないでください)

$ hostname
Device-137595

うん、ここが変わってるわけですね。

$ cat /etc/hostname 
localhost.localdomain

ここはいつも通り、変わらない君でいてくれて嬉しいよ。(ここだけ抜き出して(ry)

// CentOS6では /etc/sysconfig/network にHOSTNAMEを指定できましたが、rc.sysinitが無くなったので
// CentOS7では /etc/hostname に変わっているようです


でまあ、変わったことといえば、今テザリングしているスマホが、
au のHTL21からHTL23になったことなんですね。(乃木坂は推してない)

うーん、じゃあDHCPで渡されてるのかしらん。
じゃあホスト名設定してたらどうなるん?ホスト名死んでしまうん?

と思ったので、ホスト名を設定して再起動してみる。

// CentOS7からはこれで設定できる、他にもやり方あるけど

$ hostnamectl set-hostname Ernesto.Hoost

再起動後... あ、変わってないや。

[hijili2@Ernesto.Hoost ~]$

なんか僕がマウントポジションとったみたいで強くなった気分ですね。(は?2スベリ)


こうなってくると、DHCP上どういう感じになってるのか気になったのでパケット見てみました。

[ホスト名デフォルト(localhost.localdomain)のとき]

# tcpdump -i {無線LANデバイス} -nn -v port 67 and port 68
23:16:20.118672 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from xx:xx:xx:xx:xx:xx, length 300, xid 0xab54e737, Flags [none]
          Client-Ethernet-Address xx:xx:xx:xx:xx:xx
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message Option 53, length 1: Request
            Requested-IP Option 50, length 4: 192.168.23.136
            Parameter-Request Option 55, length 18: 
              Subnet-Mask, BR, Time-Zone, Classless-Static-Route
              Domain-Name, Domain-Name-Server, Hostname, YD
              YS, NTP, MTU, Option 119
              Default-Gateway, Classless-Static-Route, Classless-Static-Route-Microsoft, Static-Route
              Option 252, NTP
23:16:20.135743 IP (tos 0x0, ttl 64, id 27770, offset 0, flags [none], proto UDP (17), length 352)
    192.168.23.1.67 > 192.168.23.136.68: BOOTP/DHCP, Reply, length 324, xid 0xab54e737, Flags [none]
          Your-IP 192.168.23.136
          Server-IP 192.168.23.1
          Client-Ethernet-Address xx:xx:xx:xx:xx:xx
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message Option 53, length 1: ACK
            Server-ID Option 54, length 4: 192.168.23.1
            Lease-Time Option 51, length 4: 3600
            RN Option 58, length 4: 1800
            RB Option 59, length 4: 3150
            Subnet-Mask Option 1, length 4: 255.255.255.0
            BR Option 28, length 4: 192.168.23.255
            Default-Gateway Option 3, length 4: 192.168.23.1
            Domain-Name-Server Option 6, length 4: 192.168.23.1
            Hostname Option 12, length 13: "Device-137595"★
            Vendor-Option Option 43, length 15: 65.78.68.82.79.73.68.95.77.69.84.69.82.69.68

[ホスト名設定したとき]

# tcpdump -i {無線LANデバイス} -nn -v port 67 and port 68
23:05:50.885767 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from xx:xx:xx:xx:xx:xx, length 300, xid 0xac568002, Flags [none]
          Client-Ethernet-Address xx:xx:xx:xx:xx:xx
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message Option 53, length 1: Request
            Requested-IP Option 50, length 4: 192.168.23.136
            Hostname Option 12, length 7: "Ernesto.Hoost"★
            Parameter-Request Option 55, length 18: 
              Subnet-Mask, BR, Time-Zone, Classless-Static-Route
              Domain-Name, Domain-Name-Server, Hostname, YD
              YS, NTP, MTU, Option 119
              Default-Gateway, Classless-Static-Route, Classless-Static-Route-Microsoft, Static-Route
              Option 252, NTP
23:05:50.933661 IP (tos 0x0, ttl 64, id 27769, offset 0, flags [none], proto UDP (17), length 346)
    192.168.23.1.67 > 192.168.23.136.68: BOOTP/DHCP, Reply, length 318, xid 0xac568002, Flags [none]
          Your-IP 192.168.23.136
          Server-IP 192.168.23.1
          Client-Ethernet-Address xx:xx:xx:xx:xx:xx
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message Option 53, length 1: ACK
            Server-ID Option 54, length 4: 192.168.23.1
            Lease-Time Option 51, length 4: 3600
            RN Option 58, length 4: 1800
            RB Option 59, length 4: 3150
            Subnet-Mask Option 1, length 4: 255.255.255.0
            BR Option 28, length 4: 192.168.23.255
            Default-Gateway Option 3, length 4: 192.168.23.1
            Domain-Name-Server Option 6, length 4: 192.168.23.1
            Hostname Option 12, length 7: "Ernesto.Hoost"★
            Vendor-Option Option 43, length 15: 65.78.68.82.79.73.68.95.77.69.84.69.82.69.68

localhost.localdomainじゃなければ、クライアント側がホスト名を主張するんですね。
で、サーバ側がホスト名をそのまま返すと。一般的にそういうもんなのかな?

ということで、HTL21はおそらくホスト名は返さない仕様で、
HTL23はホスト名が無ければ"Device-xxxxxx"っていうのを返す仕様なんだと。
知ってか知らずか分かりませんが、、、



ちなみに、このDHCPで渡ってきたホスト名がどこにあってどう優先されるかまでは調べてません、、、
straceした感じだとunameシステムコールの値出してるのかな?

$ strace hostname
  :
uname({sys="Linux", node="Device-137595", ...}) = 0
  :

はいはいuname見るよ。

$ man 2 uname
  :
名前
       uname - 現在稼働中のカーネルについての名前と情報を得る
  :
説明
       uname()  は buf で指される構造体にシステム情報を返す。 utsname 構造体は <sys/utsname.h> で以下のように定義されている。

           struct utsname {
               char sysname[];    /* OS の名前 (例: "Linux") */
               char nodename[];   /* 「実装時に定義された、何らかの
                                     ネットワーク」におけるマシン名 */
  :

/* 「実装時に定義された、何らかのネットワーク」におけるマシン名 */ ってなんだよ。

教えて、 "LANG=C man 2 uname" !

/* Name within "some implementation-defined network" */

うん、変わらない君でいてくれて嬉しいよ。(2回目)



最初からちゃんとホスト名設定しとけよ、バカバカ! ってことですね。

パンクブーブー的な投げやりなおしまい、ありがとうございました。