스크립트를 작성 중인데 어떤 인터페이스에서 IP 트래픽이 통과하는지 감지해야 합니다. 이는 아치에서 IP 주소가 4개의 NIC 중 하나에만 사용되지만 4개 중 어느 것이든 가능하기 때문입니다.
제가 수동으로 수행한 방법은 tcpdump를 실행하는 것입니다. 패킷이 보이면 이것이 인터페이스입니다. 그렇지 않은 경우 tcpdump를 취소하고 다른 인터페이스에서 다른 tcpdump를 수행하십시오.
저는 FreeBSD를 실행하고 있습니다.
답변1
부르다route get
.
route get 192.0.2.42 | awk '$1 ~ /interface/ {print $2}'
답변2
netstat -tau
프로그램에서 사용하는 로컬 주소와 포트를 보여줍니다. 본딩과 같은 경우를 제외하고 각 인터페이스에는 자체 주소가 있습니다. 이것이 필요한 정보입니까?
그렇다면 스크립트에서 이를 사용하는 것이 쉽고 출력도 grep
쉽습니다 .cut
예:
netstat -taunpe | grep firefox | awk '{print $4}' | cut -d ':' -f 1
"firefox"가 설정한 연결에 사용되는 로컬 주소를 검색합니다.
답변3
*BSD에 대해서는 잘 모르겠지만 Linux에서는 route -n
(다른 것과는 별도로) 플래그(기본 경로로 표시된 줄을 검색하고 싶을 수도 있음)와 장치 이름을 알려줍니다.
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.100.63.254 0.0.0.0 UG 0 0 0 eth0
10.100.0.0 0.0.0.0 255.255.192.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
또는:
$ ip route
default via 10.100.63.254 dev eth0
10.100.0.0/18 dev eth0 proto kernel scope link src 10.100.12.38
127.0.0.0/8 dev lo scope link
169.254.0.0/16 dev eth0 scope link