2011-09-26 4 views
0

동료 코더없이 UDP를 보냅니다. 내가 libnetfilter_queue 모듈을 사용하여 내 나가는 트래픽을 모니터링하고 있습니다과 iptables에가 ipatbles를 지배 -I OUTPUT 1 -p 모든 -j는 11,220Linux 앱은 소켓

는 (자바에서 실행) Jitsi라는 특정 응용 프로그램은, --queue-NUM입니다 NFQUEUE 전에는 만나지 못한 이상한 행동을 보입니다 : NFQUEUE 패킷을 처리하는 모니터링 프로그램이 "/ proc/net/udp"및 "/ proc/net/udp6 "은 비어 있고,"/ proc/net/protocols "에는 UDP에 대한"소켓 "열이 있으며 0입니다. 그러나 UDP 패킷은 계속 전송됩니다. 그런 다음 1 분 정도 후에 "/ proc/net/udp"및 "/ proc/net/protocols"가 UDP 패킷에 대한 올바른 정보를 보여주기 시작합니다. 그리고 잠시 후 UDP 패킷이 전송되는 동안 정보가 없습니다.

내 유일한 결론은 응용 프로그램이 소켓을 만들지 않고 UDP 패킷을 보내거나 소켓을 생성 한 다음 삭제하여 (따라서 커널이 아무 것도 없다고 생각할 수 있도록) 그리고 여전히 일부를 사용하는 것입니다 외부로 패킷을 보내는 애매한 방법.

그런 행동에 대한 아이디어가있는 사람이 손을 댈 수 있습니까?

+5

보낼 패킷마다 소켓을 열거 나 닫을 수 있습니까? 소켓 열을 이해하는 것은 소켓이 프로세스에 의해 열린 상태로 유지된다는 것입니다. Jitsi가 무언가를 보내는 순간에 프로토콜 데이터를 확인하지 않으면 소켓 수에 0이 표시됩니다. –

+0

당신 말이 맞아요, 그들은 활동적인 과정을 위해 보여집니다. 내 응용 프로그램 검사/proc/* 패킷을받은 후 * 10msec, 타임 스탬프를 확인했습니다. (그러나 내 문제에 대한 해결책을 찾았습니다.) – abirvalg

답변

0

올바른 방향으로 나에게 힌트를주는 당신에게 폴 루벨 감사드립니다. strace는 자바 애플리케이션이 IPv6 소켓을 사용하고있는 것으로 나타났습니다. 나는/proc/net/udp6을 자세히 살펴 봤는데 그 소켓이 있었다. 나는 그곳에서 그들을 찾을 것으로 기대하지 않았기 때문에 주로 처음에는 너무보기 싫었습니다. IPv6 소켓을 통해 IPv4 패킷을 발견 한 것은 이번이 처음입니다. 그러나 이것이 바로 Java가하는 것입니다. 건배.

+2

문제가 해결되면 대답을 수락하는 것이 좋습니다. –

4

두 아이디어 :

은 strace를 통해 응용 프로그램을 실행 해, 그 출력을 살펴.

소켓 작업을위한 필터를 사용하여 systemtap을 실행 해 볼 수도 있습니다. 링크에서 :

probe kernel.function("*@net/socket.c").call { 
    printf ("%s -> %s\n", thread_indent(1), probefunc()) 
} 
probe kernel.function("*@net/socket.c").return { 
    printf ("%s <- %s\n", thread_indent(-1), probefunc()) 
}