문제

원시 네트워크 패킷을 보내고 받을 수 있는 가장 쉬운 방법은 무엇입니까?일부 c API의 JNI 래핑을 직접 작성해야 하나요? 이 경우 어떤 API를 찾고 있나요?

편집하다:나는 Wireshark가 하는 일을 할 수 있기를 원합니다.인터페이스에 들어오는 모든 패킷을 기록하고 추가로 내가 만든 패킷을 다시 보낼 수 있습니다.그리고 저는 그것을 Mac에서 하고 싶습니다.

도움이 되었습니까?

해결책

뭔가 필요하다는 생각으로 시작한다면 좋다 패킷 스니퍼를 살펴보고 싶을 것입니다. http://netresearch.ics.uci.edu/kfujii/jpcap/doc/.

다른 팁

Java용 원시 소켓은 오랫동안 JDK에 대한 요청이었습니다.요청 보기 여기.해결 방법과 솔루션을 찾을 수 있는 긴 토론이 있습니다.한때 간단한 PING 작업을 위해 이 기능이 필요했는데 어떻게 해결했는지 기억이 나지 않습니다.죄송합니다 :)

지금까지 내 최선의 선택은 다음과 같습니다. BPF api를 사용하고 얇은 JNI 래퍼를 작성합니다.

순수 Java에서는 원시 소켓에 액세스할 수 없으므로 Java 코드와 네트워크 인터페이스 사이에 일종의 계층이 필요합니다.

또한 원시 소켓에 대한 액세스는 일반적으로 "루트" 프로세스에서만 사용할 수 있습니다. 그렇지 않으면 모든 사용자가 a) 모든 트래픽을 스니핑하고 b) 스푸핑된 패킷을 생성할 수 있기 때문입니다.

"루트"로 실행되도록 전체 프로그램을 작성하는 대신 일종의 IPC(RMI, 명명된 파이프, TCP 소켓 등)를 사용하여 독립 실행형 프로그램에서 패킷 캡처 및 생성을 수행하여 패킷을 교환하는 것을 고려할 수 있습니다. Java 앱으로 데이터를 수집합니다.

티니 이더넷 프레임에서 TCP 스트림으로 데이터에 직접 액세스하기 위한 라이브러리와 클래스가 있을 수 있는 Java 이더넷 컨트롤러입니다.필요한 클래스를 구현하는 내용을 찾을 수 있습니다.그렇지 않다면, 먼저 시작할 수 있는 포인터나 사용자 그룹이 있어야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top