대시 형식으로 IP 주소를 확장하는 방법은 무엇입니까?

대시 형식으로 IP 주소를 확장하는 방법은 무엇입니까?

견본

10.1.1.1-10.1.1.3
10.100.100.11-10.100.100.15

이 IP를 다음 형식으로 확장하기 위해 Linux에서 사용할 수 있는 트릭이 있습니까?

10.1.1.1
10.1.1.2
10.1.1.3

10.100.100.11
10.100.100.12
10.100.100.13
10.100.100.14
10.100.100.15

다음과 같은 온라인 도구가 있다는 것을 알고 있습니다.https://techzoom.net/lab/ip-address-calculator/, 하지만 온라인 도구를 사용하는 대신 이 스크립트를 작성하고 싶습니다.

해결책이 있으면 알려주세요(어떤 도구, bash, Python 등).

답변1

perls Net::IP모듈( libnet-ip-perlDebian 기반 시스템의 패키지) 사용 :

perl -MNet::IP -lne '
  print $an_empty_line unless $. == 1;
  my $ip = Net::IP->new($_);
  do {print $ip->ip} while (++$ip)' < file-with-ip-ranges

답변2

불행하게도 nmap은 이 형식을 지원하지 않습니다 10.1.1.1-10.1.1.3.

$ nmap -sL 10.1.1.1-10.1.1.3
Starting Nmap
Failed to resolve "10.1.1.1-10.1.1.3".
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 0.04 seconds
$ 

하지만 두 번째, 세 번째 옥텟을 제거하고 다음 10.1.1.1-3과 같이 만들 수 있다면

$ nmap -sL 10.1.1.1-3 | egrep -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
10.1.1.1
10.1.1.2
10.1.1.3
$ 

답변3

여러 범위의 경우:

awk -F[.-] '
  {for(i=$1;i<=$5;i++)
    for(j=$2;j<=$6;j++)
      for(k=$3;k<=$7;k++)
        for(l=$4;l<=$8;l++)
          printf("%d.%d.%d.%d\n", i,j,k,l)}
' file

또는 표준 입력의 경우: echo "range" | awk ...
예:

echo -n "10.0.1.10-10.1.2.12\n192.168.122.0-192.168.122.3" | awk ...
10.0.1.10
10.0.1.11
10.0.1.12
10.0.2.10
10.0.2.11
10.0.2.12
10.1.1.10
10.1.1.11
10.1.1.12
10.1.2.10
10.1.2.11
10.1.2.12
192.168.122.0
192.168.122.1
192.168.122.2
192.168.122.3

관련 정보