Linux의 특정 프로세스에서 DNS 패킷을 필터링하는 방법

Linux의 특정 프로세스에서 DNS 패킷을 필터링하는 방법

내 Linux 시스템에 의심스러운 프로그램이 있고 DNS 패킷 요청 및 응답을 구체적으로 필터링하고 싶습니다.

Wireshark가 있다는 것을 알고 있지만 명령줄을 선호합니다. 여기에서는 주로 DNS와 관련된 나가고 들어오는 패킷을 필터링할 수 있습니다.

이 문제를 어떻게 해결할 수 있나요?

답변1

tcpdump -i <interface name> -vv port 53 실행 중인 항목에 따라 서버에서 모든 DNS를 캡처하는 데 사용해 보셨나요 ?

Java 프로그램에서 사용하는 인터페이스나 IP를 설정할 수 있나요? 가능하다면 tcpdump에 필터를 사용하여 해당 IP만 제한할 수 있습니다.

인터페이스에 다른 IP를 추가해야 하는 경우 ip add 192.168.55.55/32 dev eth0설정과 일치하도록 IP와 개발 이름을 바꾸세요.

인터페이스를 설정할 수 있으면 다음을 통해 개인 VLAN을 생성할 수도 있습니다.

ip link add link eth0 <name of link> type vlan id 10설정에 맞게 ID와 인터페이스를 변경하세요. 이렇게 하면 프로그램에 대한 외부 액세스가 필요한 경우 인터페이스에서 현재 세션을 전달할 수 있습니다 sysctl net.ipv4.conf.eth0.forwarding. 링크의 IP를 /32 주소로 설정하면 전달이 작동합니다.

링크와 마찬가지로 Tap 장치를 추가하면 ip link add link eth0 <name of tap> type tap위의 전달 및 IP 주소도 적용됩니다.

자체 IP 또는 인터페이스에서 얻을 수 있는 경우 다음을 수행합니다.

자체 인터페이스: tcpdump -i <interface name> -n -p -vv port 53-n은 DNS 조회를 중지하고 결과를 더 빠르게 표시합니다. -p는 promisc를 중지합니다(tcpdump의 기본 모드가 아니더라도 물리적 인터페이스에서 모든 패킷 수신). 마지막으로 -vv는 자세한 정보를 표시하므로 패킷 데이터를 입력합니다.

자체 IP: tcpdump -i <interface name> -n -p port 53 host <ip address>이 IP는 로컬 설정과 일치하는 Java 프로그램 및 인터페이스의 IP입니다.

답변2

strace가장 좋은 계획이겠지.

프로세스가 이미 실행 중이면 ps aux프로세스의 pid를 실행하고 가져옵니다.

그런 다음 실행strace -f -e trace=network -s 1500 -p <pid here>

-s 1500은 mtu가 표준 1500이라고 가정하고 전체 패킷을 인쇄하는 것입니다. 큰 UDP 패킷이 있는 경우 -s 10000을 사용할 수 있지만 DNS 패킷인 경우 1500이면 충분합니다.

프로세스가 실행되고 있지 않으면 다음을 수행하십시오.strace -f -e trace=network -s 1500 cmd with arguments;

관련 정보