2020年11月7日 星期六

busybox ping

支援 IPv4 (ping -4) 和 IPv6 (ping -6, ping6),或不指定 (ping)。

@networking/ping.c

簡單來說,首先透過 xhost_and_af2sockaddr(hostname, 0, af) 取得 sockaddr 格式的網址。

  • hostname 可以是名稱網址或數字網址。
  • 0 是沒用到的 port。
  • af 可以是 AF_INET 強制使用 IPv4、AF_INET6 強制使用 IPv6,或 AF_UNSPEC 不指定,由 hostname 判斷或依據 DNS 結果決定最終是 IPv4 還是 IPv6。
  • xhost_and_af2sockaddr() 實際上是呼叫 str2sockaddr(host, port, af, ai_flags),亦用在 traceroute、arping 等許多程式。host 格式也可以是 local:、[xx]:port、xx:port。host 中如果有 port 會取代函數傳入的 port。inet_aton() 檢查是否為數字 IPv4,inet_pton(AF_INET6) 檢查是否為數字 IPv6,否則需要 getaddrinfo()

ping 回應逾時等候使用 signal(SIGALRM) 和 alarm()。

最後發封包,IPv6 呼叫 ping6(),否則呼叫 ping4()。

參考

  1. busybox ping.c
  2. https://lirobo.blogspot.com/2014/11/tcpdump.html
  3. https://lirobo.blogspot.com/2010/10/dns.html
  4. https://lirobo.blogspot.com/2010/06/mtu.html

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...