독개

JnetPcap 디바이스검색/패킷캡처/패킷전송

by #독개#

jnetpcap.dll

jnetpcap.jar

WinPcap_4_1_3.exe

npcap & winpcap 두개다 깔려있으면 npcap이 상위버전이라 winpcap무시 jnetpcap은 오래된거라 winpcap을 이용함 고로 winpcap만깔것 (현재 와이어샤크는 npcap씀)


package src;


import java.util.ArrayList;

import java.util.Arrays;

import java.util.Scanner;

import org.jnetpcap.Pcap;

import org.jnetpcap.PcapIf;

import org.jnetpcap.packet.PcapPacket;

import org.jnetpcap.packet.PcapPacketHandler;


public class Main {


public static void main(String[] args) {

//----네트워크 디바이스 검색

//네트워크 장비를 저장하는 공간을 할당합니다.

ArrayList<PcapIf> allDevs = new ArrayList<PcapIf>();

StringBuilder err = new StringBuilder(); //오류 메세지를 담는 버퍼

//네트워크 장비를 찾아서 저장 결과는 r에 담김

int r = Pcap.findAllDevs(allDevs, err);

Scanner input = new Scanner(System.in); //나중에 디바이스 선택시사용


if (r == Pcap.NOT_OK || allDevs.isEmpty()) {

System.out.println("못찾음" + err.toString());

return;

}


System.out.println(" [네트워크 장비탐색 성공] ");

//찾은 장비를 하나씩 돌면서 정보를 출력

int i = 0;

for (PcapIf device : allDevs) {

String description = (device.getDescription() != null) ? device.getDescription() : "설명 없음";

System.out.printf("[ %d번 ] : [ %s ] [%s]\n", i++, device.getName(), description);

}


//어떤 디바이스(랜카드)를 선택할지

System.out.print("네트워크 디바이스 선택 :");

int no = input.nextInt(); //위에서 Scanner햇음


PcapIf device = allDevs.get(no);

System.out.println(device.getDescription());


int snaplen = 64 * 1024; //65536바이트 만큼 파일캡쳐 설정

int flags = Pcap.MODE_PROMISCUOUS;  //프라미스큐어스 모드 설정

int timeout = 10 * 1000; //타임아웃(제한시간)을 10초로 설정

// 장치의 패킷 캡처를 활성화시킴

Pcap pcap = Pcap.openLive(device.getName(), snaplen, flags, timeout, err);

// Pcap 객체가 생성되지 않으면 오류 메세지를 발생

if (pcap == null) {

System.out.printf("캡쳐 할수 없음");

return;

}


//----패킷캡쳐 (전송시 이부분 주석처리)

// 패킷을 처리하는 패킷 핸들러를 정의

PcapPacketHandler<String> Handler = new PcapPacketHandler<String>() {

public void nextPacket(PcapPacket packet, String user) {

System.out.println(packet);

}

};

//무한으로 패킷캡처 ex) pcap.loop(10, handler, ""); 10번캡처

pcap.loop(Pcap.LOOP_INFINITE, Handler, "");

pcap.close();

//---------------------------------------

/* ----패킷전송

byte[] bytes = new byte[1024];

PcapPacketHandler<String> Handler2 = new PcapPacketHandler<String>() {

public void nextPacket(PcapPacket packet, String user) {

Arrays.fill(bytes, (byte)0xFF);

bytes[6] = (byte) 0xAA;

bytes[7] = (byte) 0xBB;

pcap.sendPacket(bytes);

}

};

pcap.loop(Pcap.LOOP_INFINITE, Handler2, "");

pcap.close();

//---------------------------------------

*/


}

}




'🔥 프로그래밍 학습 > JAVA' 카테고리의 다른 글

Java FX  (0) 2020.06.10
arp spoofing만드는중  (0) 2020.06.08
네트워킹  (0) 2020.06.04
포트스캐너  (0) 2020.06.03
메소드  (0) 2020.06.02

블로그의 정보

독한 개발자

#독개#

활동하기