[Linux] 用 strace 追蹤 hostname 呼叫的 API
最近在看一個問題,在某台機器上,
執行 hostname 時,顯示的是正常的 test-centos8,
但執行 hostname -f 或 hostname –fqdn 時,
則是顯示一個很怪的 prod-sav-park-lb01-1919960993.us-east-2.elb.amazonaws.com…
當然去找 hostname 的原始碼,是一個方向,
不過更快的方式,還是看看 strace 可以透露出什麼訊息~
這次在 strace 上加了另外兩個參數,方便更完整的觀察系統呼叫:
- -v: 讓參數等等不以縮寫顯示
- -s 1024: 讓字串可以顯示到 1024 字元 (預設只有 32)
這是我下的指令:
strace -v -s 1024 -f hostname -f
執行的結果,前面可以看到它去查 uname,
接著去開 /etc/nsswitch.conf 和 /etc/resolv.conf,這邊看來都是正常。
後來看它去連 10.1.2.3,這是 /etc/resolv.conf 有列的一台 DNS server,
然後它就用 sendmmsg() 發了一個訊息去問 test-centos8.test.com,
想必是送了一個 DNS 請求給 10.1.2.3 這台 DNS server。
接著 recvfrom() 就收到了回覆,裡面就包含了 prod-sav-park-lb01-1919960993 這個字眼:
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.1.2.3")}, 16) = 0 sendmmsg(3, [{msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\21z\1\0\0\1\0\0\0\0\0\0\vtest-centos8\test\3com\0\0\1\0\1", iov_len=39}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=39}, {msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\332\212\1\0\0\1\0\0\0\0\0\0\test-centos8\5test\3com\0\0\34\0\1", iov_len=39}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=39}], 2, MSG_NOSIGNAL) = 2 recvfrom(3, "\21z\201\200\0\1\0\4\0\4\0\5\test-centos8\5test\3com\0\0\1\0\1\300\f\0\5\0\1\0\1Pj\08\35prod-sav-park-lb01-1919960993\tus-east-2\3elb\tamazonaws\300\36\3003\0\1\0\1\0\0\0#\0\4\3\214M|\3003\0\1\0\1\0\0\0#\0\4\22\331\37I\3003\0\1\0\1\0\0\0#\0\4\22\336\n\364\300Q\0\2\0\1\0\0\4\213\0\23\6ns-127\tawsdns-15\300\36\300Q\0\2\0\1\0\0\4\213\0\31\7ns-1722\tawsdns-23\2co\2uk\0\300Q\0\2\0\1\0\0\4\213\0\27\7ns-1076\tawsdns-06\3org\0\300Q\0\2\0\1\0\0\4\213\0\26\6ns-598\tawsdns-10\3net\0\300\306\0\1\0\1\0\0G\244\0\4\315\373\306\272\300\247\0\34\0\1\0\0G\245\0\20&\0\220\0S\0\177\0\0\0\0\0\0\0\0\1\301\16\0\34\0\1\0\0G\244\0\20&\0\220\0S\2V\0\0\0\0\0\0\0\0\1\300\353\0\34\0\1\0\0G\244\0\20&\0\220\0S\0044\0\0\0\0\0\0\0\0\1\300\306\0\34\0\1\0\0G\244\0\20&\0\220\0S\6\272\0\0\0\0\0\0\0\0\1", 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.1.2.3")}, [28->16]) = 420
由上推測,DNS server 10.1.2.3 對於 test-centos8.test.com 這個 DNS 詢問,
回覆了 prod-sav-park-lb01-1919960993.us-east-2.elb.amazonaws.com。
這台 DNS server 是同事架的機器,
看來應該是設定有誤,
最後 hostname -f 才會輸出這個很奇怪的結果囉~
(本頁面已被瀏覽過 376 次)