답변:
여기서 코드가 Linux에서 작동한다는 것을 분명히해야합니다 (다른 Unices에 대한 주석 및 게시물). OP는 Linux 솔루션을 요청했지만 일반적으로 질문을 "넷 마스크를 얻는 방법"으로 변경하고 더 많은 유닉스 풍미를위한 최선의 방법을 결합시키는 것이 좋습니다.
#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'
./script eth0
netconfig, arp, rarp 및 route와 같은 다른 기존 네트워킹 명령과 함께 ifconfig는 net-tools 패키지의 일부입니다 . Net-tools는 실제로 오랜 시간 동안 적극적으로 개발되지 않았으며 최신 iproute2 패키지 를 선호하여 사용을 중단하려는 노력이 있습니다 . 간결하게하기 위해이 기본 전환에 대한 자세한 내용을 보려면 다음과 같은 관련 링크를 참조하십시오.
/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '
?
/sbin/ifconfig eth0 | awk -F: '/Mask:/{print $4}'
/sbin/ifconfig eth0 | awk '/netmask/{print $4}'
마스크 만 원하는지 궁금합니다. 아마도 마스크가있는 네트워크 (또는 IP)가 구성 파일에 사용 nmap
되거나, 또는 무엇이든 사용할 수 있습니다.
이 경우 Linux에서 ip ...
명령 출력을 구문 분석 할 수도 있습니다 .
CIDR 표기법으로 주소 및 마스크가있는 모든 인터페이스를 나열하려면 다음을 수행하십시오.
ip -o -f inet addr show | awk '/scope global/ {print $2, $4}'
또는 기본 인터페이스로 제한하려면 :
default_if=$(ip route list | awk '/^default/ {print $5}')
ip -o -f inet addr show $default_if | awk '{print $4}'
내 컴퓨터에서 "192.168.1.61/24"가 표시됩니다.
ip -o -f inet addr show scope global
와 ip route list default
.
마스크를 16 진수로 출력하는 OS를 사용하는 경우 다음과 같은 작업을 수행 할 수 있습니다.
#!/usr/bin/bash
# read the mask, and strip leading 0x if it's there
hexmask=$( echo $1 | sed -e 's/^0x//' )
# loop through $hexmask in pairs
#
for (( i=0; i<${#hexmask}; i+=2 )); do
if (( $i > 1 )); then
# use a . to separate octets
# but don't print a leading .
printf "%s" "."
fi
printf "%d" "0x${1:$i:2}"
done
printf "\n"
/sbin/ifconfig eth0 | grep Mask | cut -d":" -f4
awk
입니다 ifconfig
. 그래도 몇 가지 변경 사항을 제안합니다 ifconfig eth0 | grep -o 'Mask:[^\s]*' | cut -d':' -f2
. -o
그래서 grep
라인보다는 훨씬 (효율적)의 반환 부분입니다. 공백이 아닌 문자 ( [^\s]*
)를 일치 시켜 넷 마스크 토큰의 끝을 찾으십시오. 안전을 위해 필드 구분 기호 주위에 작은 따옴표.
/sbin/ifconfig | grep ask | sed -e 's/.*netmask //g' | sed -e 's/ .*//g'
에서는 마스크를 16 진수로 출력합니다.
기본 네트워크 장치의 넷 마스크를 찾는 경우 기본 장치가 eth0이 아닐 수 있으므로이 명령은 기본 장치를 반환합니다.
netdevice=$(ip r | grep default | awk '/default/ {print $5}')
이 명령은 마스크를 검색합니다.
netmask=$(ifconfig "$netdevice" | awk '/netmask/{ print $4;}')
Eliah Kagan과 Paulo Tome 덕분에 답을 단순화하고 명확히 할 수있었습니다. 개인용 컴퓨터에서 기본 이더넷 장치는 "wlx504654c1a91"로, 기억하기 쉽고 입력하기가 너무 복잡하여 2 단계 프로세스입니다.
grep 'pattern' | awk '{ action }'
awk '/pattern/ { action }'
ifconfig
넷 마스크 라인이 다음inet 192.168.144.120 netmask 0xffffff00 broadcast 192.168.144.255
과 같은 질문을하는 것은 어렵습니다. .