如何确定远程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 框同时支持 ip
和 ifconfig
。
我不知道当有多个网卡时该怎么办,因为我不知道在设置虚拟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[@]}"
在一个单独的问题(下面的 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 框同时支持 ip
和 ifconfig
。
我不知道当有多个网卡时该怎么办,因为我不知道在设置虚拟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[@]}"