Bash 출력 명령의 특정 부분만 구체화

Bash 출력 명령의 특정 부분만 구체화

ipsweep이라고 하는 간단한 프로그램이 있습니다. 그것이 해야 할 일은 IP 주소를 ping하고 사용 중인 IP를 표시하는 것뿐입니다.

이것이 제가 처음으로 한 일입니다:

#!/bin/bash
for ip in {1...254}; do
ping -c 1 $1.$ip
done

효과가 있었지만 필요하지 않은 정보가 표시되었습니다. 나에게 필요한 것은 사용 중인 IP 주소뿐입니다. 각 IP에 대해 다음과 같은 내용이 모두 표시되었습니다.

여기에 이미지 설명을 입력하세요

그래서 다음과 같은 필터를 추가해 보았습니다.| grep "ping" | cut -d " " -f 2

#!/bin/bash
for ip in {1...254}; do
ping -c 1 $1.$ip | grep "ping" | cut -d " " -f 2 &
done

이제 콘솔에는 IP만 표시되지만 사용자인지 여부에 관계없이 모든 IP가 표시됩니다(사용 중인 IP만 필요합니다. 반복합니다). 5시간 동안 이 문제를 해결하려고 노력했지만 여전히 해결되지 않습니다. if를 사용하면 이 문제가 해결될 수 있다는 것을 알고 있지만 작성 방법을 모르겠습니다.

여기에 이미지 설명을 입력하세요

답변1

ping 종료 코드를 사용하여 호스트가 살아 있는지 확인합니다.

#!/bin/bash
for ip in {1..254}; do
  ping -q -c 1 $1.$ip >2 2>&- && printf %s.%s\\n $1 $ip
done

답변2

첫째, 단일 패킷으로 연결을 확인하는 것은 현명하지 않지만 다음과 같습니다.

# IP address 192.168.100.1 exists, 192.168.100.122 does not.
walt@bat:~(0)$ ping -c 1 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=63 time=2.76 ms

--- 192.168.100.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.763/2.763/2.763/0.000 ms
walt@bat:~(0)$ ping -c 1 192.168.100.122
PING 192.168.100.122 (192.168.100.122) 56(84) bytes of data.

--- 192.168.100.122 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

성공 및 실패 예제에는 모두 --- 192.168.100.122 ping statistics ---로 감지하는 " " 줄이 포함되어 있습니다 grep ping.

대신 할 수 있습니다 grep ", 0% packet loss".

관련 정보