bash에서 넷 마스크를 얻는 방법?


8

Linux에서 넷 마스크를 가져오고 싶습니다. 출력 ifconfig되지만 문자열을 추출하고 싶습니다.


5
실제로 OS를 지정하지 않으면 FreeBSD의 ifconfig넷 마스크 라인이 다음 inet 192.168.144.120 netmask 0xffffff00 broadcast 192.168.144.255과 같은 질문을하는 것은 어렵습니다. .
sr_

답변:


8

여기서 코드가 Linux에서 작동한다는 것을 분명히해야합니다 (다른 Unices에 대한 주석 및 게시물). OP는 Linux 솔루션을 요청했지만 일반적으로 질문을 "넷 마스크를 얻는 방법"으로 변경하고 더 많은 유닉스 풍미를위한 최선의 방법을 결합시키는 것이 좋습니다.

#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'

./script eth0

Linux의 ifconfig 정보

netconfig, arp, rarp 및 route와 같은 다른 기존 네트워킹 명령과 함께 ifconfig는 net-tools 패키지의 일부입니다 . Net-tools는 실제로 오랜 시간 동안 적극적으로 개발되지 않았으며 최신 iproute2 패키지 를 선호하여 사용을 중단하려는 노력이 있습니다 . 간결하게하기 위해이 기본 전환에 대한 자세한 내용을 보려면 다음과 같은 관련 링크를 참조하십시오.

사례 예 : 데비안 리눅스

사례 예 : 아치 리눅스

net-tools ifconfig 매뉴얼 페이지 (버그 섹션 참조)

사용자 관점에서 프레임 워크 분석 및 비교


해당 인터페이스에 넷 마스크가 없으면이 솔루션은 '1'을 반환합니다. 정규식은 매우 중요한 단어 '마스크'에 대한 적절한 앵커의 필요성을 포함하여 신뢰할 수 있고 안전하게하기 위해 심각한 재 작업이 필요합니다.
Oliver Dungey

7
/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '

?


당신은 실종 | "마스크 :"를 제거하기 위해 -c6- cut
michelemarcon

3
awk 필드 구분자를 지정하면 "Mask :"를 제거 할 수도 있습니다./sbin/ifconfig eth0 | awk -F: '/Mask:/{print $4}'
Shane

데비안 스트레치 / 넷 툴 2.10- 알파에서 나는 이것을 다음과 같이 바꿔야했다./sbin/ifconfig eth0 | awk '/netmask/{print $4}'
Shane

7

마스크 만 원하는지 궁금합니다. 아마도 마스크가있는 네트워크 (또는 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"가 표시됩니다.


2
... 그것은 당신이 할 수있는 중 '범위 글로벌'또는 '기본'에 맞게 정말 필요가 없습니다 ip -o -f inet addr show scope globalip route list default.
bryn

3

마스크를 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"

2
/sbin/ifconfig eth0 | grep Mask | cut -d":" -f4

나머지가 고정 된 수의 열에 의존하는 한 이것이 최선의 대답 awk입니다 ifconfig. 그래도 몇 가지 변경 사항을 제안합니다 ifconfig eth0 | grep -o 'Mask:[^\s]*' | cut -d':' -f2. -o그래서 grep라인보다는 훨씬 (효율적)의 반환 부분입니다. 공백이 아닌 문자 ( [^\s]*)를 일치 시켜 넷 마스크 토큰의 끝을 찾으십시오. 안전을 위해 필드 구분 기호 주위에 작은 따옴표.
Oliver Dungey

macOS /sbin/ifconfig | grep ask | sed -e 's/.*netmask //g' | sed -e 's/ .*//g'에서는 마스크를 16 진수로 출력합니다.
토 마치

1

기본 네트워크 장치의 넷 마스크를 찾는 경우 기본 장치가 eth0이 아닐 수 있으므로이 명령은 기본 장치를 반환합니다.

netdevice=$(ip r | grep default | awk '/default/ {print $5}')

이 명령은 마스크를 검색합니다.

netmask=$(ifconfig "$netdevice" | awk '/netmask/{ print $4;}')

Eliah Kagan과 Paulo Tome 덕분에 답을 단순화하고 명확히 할 수있었습니다. 개인용 컴퓨터에서 기본 이더넷 장치는 "wlx504654c1a91"로, 기억하기 쉽고 입력하기가 너무 복잡하여 2 단계 프로세스입니다.


1
grep 'pattern' | awk '{ action }'awk '/pattern/ { action }'
21:06
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.