ping
테스트 하고 명령하기 위해 몇 가지 실험을 하고 싶습니다 fping
(참조:Linux의 "ping -o"와 동일), 하지만 이를 테스트하려면 로컬 가상 이더넷 인터페이스가 필요합니다.
나는 ping 10.0.0.1
(또는 다른 IP) 실행하고 실패할 수 있는 시나리오를 원합니다. 그런 다음 계속 실행되는 동안 ping
몇 가지 명령을 실행하여 인터페이스를 열고 통과합니다. 즉, 출력이 ping
변경됩니다.실행될 때, 가상 장치가 "활성" 상태가 되기 때문입니다. 물리적인 하드웨어를 사용하고 싶지 않습니다.
어떻게 해야 하나요?
나는 내 지시에 따라 노력했습니다 (물리적 어댑터 없이 컴퓨터에서 가상 이더넷 인터페이스를 만드는 방법은 무엇입니까?), 그러나 불행히도 실행 후에도 sudo ip link set eth10 down
eth10을 통한 ping은 ping 10.0.0.1
여전히 성공합니다. sudo ip link delete eth10 type dummy
더미 가상 장치를 삭제하기 위해 실행한 후에도 ping 10.0.0.1
여전히 성공했습니다.
지금까지의 기능적 답변 요약:
(2021년 11월 22일 기준)
내 답변을 포함하여 3개의 답변을 받았습니다.3가지 답변 모두 유효합니다.! :
- 스티븐 해리스- 루프백 하위 인터페이스를 사용하십시오(아마도 지금까지 가장 좋은 답변일 것입니다).
- 작성자: Hauke Larkin- iptables를 사용하세요
- 내 자신의 대답- 가상 인터페이스 사용
답변1
Linux에서는 lo(루프백)의 하위 인터페이스를 사용하여 이 작업을 수행할 수 있습니다.
예를 들어 한 창에서 나는 실행합니다.
% ping 10.200.200.1
PING 10.200.200.1 (10.200.200.1) 56(84) bytes of data.
주소에 대한 정보가 없어서 답변을 받지 못했습니다.
다른 창에서
% sudo ifconfig lo:100 10.200.200.1 netmask 255.255.255.0 up
이제 핑이 응답하기 시작합니다.
64 bytes from 10.200.200.1: icmp_seq=25 ttl=64 time=0.058 ms
64 bytes from 10.200.200.1: icmp_seq=26 ttl=64 time=0.035 ms
64 bytes from 10.200.200.1: icmp_seq=27 ttl=64 time=0.037 ms
64 bytes from 10.200.200.1: icmp_seq=28 ttl=64 time=0.040 ms
그럼 난 할 수 있어
% sudo ifconfig lo:100 down
그리고 ping이 다시 작동을 멈췄습니다.
기본적으로 우리가 하는 일은 루프백 인터페이스에 "하위 인터페이스"를 추가하는 것입니다. 이 경우에는 호출 하지만 -> 를 lo:100
선택할 수 있습니다 .lo:1
lo:255
하위 인터페이스는 실제로 동일한 인터페이스에 2개 이상의 주소를 할당하는 방법입니다. 예를 들어, 주소를 할당하면 eth0:1
컴퓨터는 물리적 인터페이스에 2개의 주소를 갖게 되며 네트워크의 다른 컴퓨터는 두 주소 모두에서 액세스할 수 있습니다. 이를 lo
루프백에 넣는다는 것은 테스트 머신만이 추가 주소를 알고 나머지 네트워크는 영향을 받지 않는다는 것을 의미합니다.
패킷 수준에서 모든 트래픽 lo:100
은 lo
. 이것은 다르다가짜완전히 새로운 인터페이스를 생성하고 인터페이스에 대한 트래픽을 격리합니다.
답변2
10.0.0.1
인터페이스 중 하나를 추가한 경우 다음을 사용하여 해당 주소로 ping 패킷을 삭제할 수 있습니다.
iptables -I OUTPUT 1 -p icmp --icmp-type echo-request -d 10.0.0.1 -j DROP
다음 명령을 사용하여 이 규칙을 삭제할 수 있습니다.
iptables -D OUTPUT -p icmp --icmp-type echo-request -d 10.0.0.1 -j DROP
이 두 명령을 교대로 실행하여 두 상태 사이를 전환할 수 있습니다.
ping 10.0.0.1
다음은 패킷이 통과되고 차단된 후 다시 통과되는 것을 보여주는 일부 샘플 출력입니다 .
$ ping 10.0.0.1 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=5.04 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=4.20 ms 64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=3.33 ms ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permitted 64 bytes from 10.0.0.1: icmp_seq=8 ttl=64 time=8.49 ms 64 bytes from 10.0.0.1: icmp_seq=9 ttl=64 time=3.33 ms 64 bytes from 10.0.0.1: icmp_seq=10 ttl=64 time=6.90 ms 64 bytes from 10.0.0.1: icmp_seq=11 ttl=64 time=6.91 ms ^C --- 10.0.0.1 ping statistics --- 11 packets transmitted, 7 received, 36% packet loss, time 10088ms rtt min/avg/max/mdev = 3.330/5.459/8.491/1.859 ms
답변3
@Hauke Laging 님 말씀이 맞습니다내 질문에 대한 그의 의견에서:
차이가 있을 수 있습니다
10.0.0.1
.ip route get 10.0.0.1
두 경우의 출력을 비교하십시오 .
ip route get 10.0.0.1
이것을 보여줘앞으로가상 인터페이스 삭제:
local 10.0.0.1 dev lo src 10.0.0.1 uid 46153590
...경로가 내가 만든 가상 인터페이스를 통과한다고 제안하며 다음과 같이 표시됩니다.뒤쪽에다음을 실행하여 가상 인터페이스를 삭제합니다 sudo ip link delete eth10 type dummy
.
10.0.0.1 dev wlp0s20f3 src 10.0.0.36 uid 28301632
...이제 IP가 내 wlp0s20f3
무선 카드를 통해 라우팅되고 있음을 나타냅니다. 내 로컬 WiFi가 10.0.0.x
IP 주소를 사용하고 할당하고 있기 때문에 이것이 의미가 있다고 생각합니다 .
따라서 해결책은 단순히 다른 IP를 선택하는 것입니다.아니요가상 인터페이스를 생성하기 전에 ping을 수행할 수 있습니다! 내 경우에는 10.0.0.100
대신 사용하면 10.0.0.1
잘 작동했습니다 . 그러나 우리는 254.254.254.254
이 예에서만 이것을 사용합니다.
완전한 예:
먼저 사용하려는 IP 주소가 현재 응답하지 않는지 확인하세요 ping
.
ping -c 1 -W 1 254.254.254.254
예제 출력:
PING 254.254.254.254 (254.254.254.254) 56(84) bytes of data. --- 254.254.254.254 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms
이제 가상 eth99
인터페이스를 만듭니다. (전체 지침은 다른 답변을 참조하세요.물리적 어댑터 없이 컴퓨터에서 가상 이더넷 인터페이스를 만드는 방법은 무엇입니까?):
sudo modprobe dummy \
&& sudo ip link add eth99 type dummy \
&& sudo ip address change dev eth10 254.254.254.254 \
&& ip address
이제 핑을 할 수 있습니다. 달리기 ping 254.254.254.254
. 예제 cmd 및 출력:
$ ping 254.254.254.254 PING 254.254.254.254 (254.254.254.254) 56(84) bytes of data. 64 bytes from 254.254.254.254: icmp_seq=1 ttl=64 time=0.086 ms 64 bytes from 254.254.254.254: icmp_seq=2 ttl=64 time=0.093 ms 64 bytes from 254.254.254.254: icmp_seq=3 ttl=64 time=0.086 ms 64 bytes from 254.254.254.254: icmp_seq=4 ttl=64 time=0.051 ms ^C --- 254.254.254.254 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3050ms rtt min/avg/max/mdev = 0.051/0.079/0.093/0.016 ms
이제 ping 254.254.254.254
한 터미널에서 실행하고 sudo ip link delete eth99 type dummy
다른 터미널에서 실행하는 경우 인터페이스가 제거되면 핑 응답 증가가 중지됩니다. sudo modprobe dummy; sudo ip link add eth99 type dummy; sudo ip address change dev eth99 254.254.254.254; ip address
다시 인터페이스가 다시 생성되고 핑이 다시 응답하기 시작합니다.