Daemon

如何檢查守護程序正在監聽哪個介面?

  • April 18, 2019

例如:一個 sshd 被配置為只監聽 wlan0。所以。除了檢查 sshd_config 之外,我如何檢查守護程序是否正在偵聽什麼介面?netstat 可以嗎?如何?(作業系統:openwrt 或科學 linux 或 openbsd)

更新:

我認為 sshd 可能僅限於一個介面……但沒有……(192.168.1.5 在 wlan0 上……)

# grep ^ListenAddress /etc/ssh/sshd_config 
ListenAddress 192.168.1.5:22
# 
# lsof -i -n -P
COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd      23952 root    3u  IPv4 1718551      0t0  TCP 192.168.1.5:22 (LISTEN)
#
# ss -lp | grep -i ssh
0      128              192.168.1.5:ssh                           *:*        users:(("sshd",23952,3))
# 
# netstat -lp | grep -i ssh
tcp        0      0 a.lan:ssh                   *:*                         LISTEN      23952/sshd          
#

(您可能需要ip在 openwrt 上安裝軟體包(v12 / 姿態調整)

ifconfig/netstat 等被認為是deprecated,所以你應該使用(作為root)

ss -nlput | grep sshd

顯示包含字元串的正在執行的程序sshd正在偵聽的 TCP/UDP 套接字

  • -n
    沒有名稱解析的埠
  • -l
    僅監聽套接字
  • -p
    顯示程序監聽
  • -u
    顯示 udp 套接字
  • -t
    顯示 tcp 套接字

然後你得到一個像這樣的列表:

tcp    LISTEN     0      128                    *:22                    *:*      users:(("sshd",3907,4))
tcp    LISTEN     0      128                   :::22                   :::*      users:(("sshd",3907,3))
tcp    LISTEN     0      128            127.0.0.1:6010                  *:*      users:(("sshd",4818,9))
tcp    LISTEN     0      128                  ::1:6010                 :::*      users:(("sshd",4818,8))

有趣的是第 5 列顯示了 IP 地址和埠的組合:

  1. *:22
    在每個可用的 IPv4 地址上偵聽埠 22
  2. :::22
    在每個可用 IP 地址的埠 22 上偵聽(我不寫 IPv6,因為根據RFC 6540 ,IP 是 IPv6 )
  3. 127.0.0.1:6010
    偵聽 IPv4 地址 127.0.0.1 (localhost/loopback) 和埠 6010
  4. ::1:6010
    偵聽 IP 地址 ::1(完整表示法為 0:0:0:0:0:0:0:1,也是 localhost/loopback)和埠 6010

然後,您想知道哪些介面具有 IPv4 地址(涵蓋 1。)

ip -4 a
# or "ip -4 address"
# or "ip -4 address show"

或 IP 地址(覆蓋 2.)

ip -6 a
# or "ip -6 address
# or "ip -6 address show

(如果您不添加 IP ( -6) 或 IPv4 ( -4) 選項,則會顯示兩者)

您還可以查看輸出並蒐索例如127.0.0.1或任何其他 IP/IPv4 地址

# here a demo where i show all addresses of the device "lo" (loopback)
ip a show dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
   inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever

inet以並inet6顯示這些 IP 綁定到此介面的行開頭的行,每個介面可能有許多這樣的行:

he-ipv6: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN
   link/sit 192.0.2.1 peer 192.0.2.3
   inet6 2001:db8:12::1/64 scope global
      valid_lft forever preferred_lft forever
   inet6 2001:db8::2/64 scope global
      valid_lft forever preferred_lft forever
   inet6 fe80::1111:1111/128 scope link
      valid_lft forever preferred_lft forever

並在腳本中:

address="127.0.0.1"
for i in $(grep ':' /proc/net/dev | cut -d ':' -f 1 | tr -d ' ') ; do
       if $(ip address show dev $i | grep -q "${address}") ; then
               echo "${address} found on interface ${i}"
       fi
done

(替換“127.0.0.1”)

引用自:https://unix.stackexchange.com/questions/54975