如何确定远程SSH登录的子网掩码和网卡?

How to determine the subnet mask and network interface card from remote SSH login?

在一个单独的问题(下面的 link)中,有人建议我从远程 SSH 登录中获取网络接口卡号和子网掩码,而不是提示用户输入。我所拥有的只是远程主机的 IP 地址。我需要获取子网掩码以确定远程主机和本地主机是否在同一子网中,以及接口卡号以设置和配置虚拟 IP 以实现别名。

有人可以建议我如何能够解析出必要的信息并将其 return 发送到启动远程 ssh 连接的 shell 脚本吗?我的目标主机使用 Linux 或 AIX 作为操作系统。我熟悉 netstat 函数,但我不确定从中解析信息是否有效,或者是否有更好的方法来获得我需要的东西,它适用于 Linux 和 AIX 操作系统。

感谢您提供的任何帮助!

--更新--

AIX ifconfig -a:

$ ifconfig -a
en0: flags=1e080863,480<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPR
T,64BIT,CHECKSUM_OFFLOAD(ACTIVE),CHAIN>
        inet 10.105.65.131 netmask 0xffff0000 broadcast 10.105.255.255
         tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1
lo0: flags=e08084b,c0<UP,BROADCAST,LOOPBACK,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64
BIT,LARGESEND,CHAIN>
        inet 127.0.0.1 netmask 0xff000000 broadcast 127.255.255.255
        inet6 ::1%1/0
         tcp_sendspace 131072 tcp_recvspace 131072 rfc1323 1

AIX netstat -rn:

$ netstat -rn
Routing tables
Destination        Gateway           Flags   Refs     Use  If   Exp  Groups

Route tree for Protocol Family 2 (Internet):
default            10.105.65.1       UG       31  39412125 en0      -      -
10.105.0.0         10.105.65.131     UHSb      0         0 en0      -      -   =
>
10.105/16          10.105.65.131     U       219 985607244 en0      -      -
10.105.65.131      127.0.0.1         UGHS      5   1326738 lo0      -      -
10.105.255.255     10.105.65.131     UHSb      3   6926640 en0      -      -
127/8              127.0.0.1         U        36  11962928 lo0      -      -

Route tree for Protocol Family 24 (Internet v6):
::1%1              ::1%1             UH        1    393270 lo0      -      -

我试过 route get 但这在我的 AIX 机器上无法告诉我路线。我唯一可以开始工作的是 netstat -rn。我不确定是否有另一个类似于 ip route 的命令可以工作。

Linux 框同时支持 ipifconfig

我不知道当有多个网卡时该怎么办,因为我不知道在设置虚拟IP时应该使用哪一个。

Linux 设置是我更关心的,因为我最终会为我的软件安装脚本添加 AIX 支持,然后可以对其进行更多研究。

对于 Linux,我可能会这样做(使用 bash 扩展,因此使用 #!/bin/bash shebang 调用,或者将脚本通过 stdin 传递给调用为ssh "$hostname" bash <<'EOF'):

internet_address=8.8.8.8 # read data for the NIC used to route here
dev_re='dev ([^[:space:]]+)($|[[:space:]])'
read default_route < <(ip -o route get "$internet_address")
[[ $default_route =~ $dev_re ]] && devname=${BASH_REMATCH[1]}

IFS=$'\n' read -r -d '' -a addresses < \
  <(netstat -rn | 
    awk -v dev="$devname" ' == dev && ( == "0.0.0.0" ||  == "default") { print  }')

# emit this output however you like
printf '%s\n' "$dev_re" "${addresses[@]}"