자바FX MVC 모델 틀 잡기

 

prefHeight 높이 설정

 

prefWidth 너비 설정

 

childern 자식 으로 ListView 가 들어갈 수 있는데 하나하나 원소를 담을 수 있는 리스트를 보여주는 공간

 

TextArea 에서 editable 은 수정 가능 여부

 

Main.java

 

package controller;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

public class Main extends Application {
	
	private Stage primaryStage;
	private AnchorPane layout;
	
	@Override
	public void start(Stage primaryStage) {
		this.primaryStage = primaryStage;
		this.primaryStage.setTitle("JavaFX ARP SPoofing");
		setLayout();
	}
	
	public void setLayout() {
		try {
			FXMLLoader loader = new FXMLLoader();
			loader.setLocation(Main.class.getResource("../view/View.fxml"));
			layout = (AnchorPane) loader.load();
			Scene scene = new Scene(layout);
			primaryStage.setScene(scene);
			primaryStage.show();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public Stage getPrimaryStage() {
		return primaryStage;
	}
	
	public static void main(String[] args) {
		launch(args);
	}

}

 

 

View.fxml

 

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextArea?>


<AnchorPane prefHeight="480" prefWidth="490" xmlns:fx="http://javafx.com/fxml/1">
	<children>
		<ListView layoutX="15" layoutY="14" prefHeight="78" prefWidth="462"></ListView>
		<Button layoutX="395" layoutY="103" prefHeight="29" prefWidth="82" text="PICK"></Button>
		<TextArea editable="false" layoutX="15" layoutY="144" prefHeight="325" prefWidth="462"></TextArea>
	</children>
</AnchorPane>

'Hacking > ARP 스푸핑' 카테고리의 다른 글

공부(13)  (0) 2021.09.12
공부(12)  (0) 2021.09.11
공부(10)  (0) 2021.09.10
공부(9)  (0) 2021.09.10
공부(8)  (0) 2021.09.10

JavaFX

 

JavaFX는 현재 프로그램 개발의 트렌드라고 할 수 있는 MVC 모델을 따르고 있다

 

M(Model) V(View) C(Controller)

 

이벤트가 생기면 컨트롤러로 넘어가서 처리가 되는데

 

이 컨트롤러는 그러한 이벤트에 따라 어떠한 처리를 한 뒤에 모델과 뷰를 업데이트 시킴 

 

모델 : 데이터의 형태를 정의함

 

뷰 : 모델에서 정의된 데이터를 실제로 사용자한테 출력

 

컨트롤러 : 실질적으로 Model과 view를 다루어 처리

 

이렇게 귀찮은 MVC 모델을 사용하는 이유는?

 

=> 익숙해지면 생산성이 굉장히 높다

 

=> 협업에 유리하다.

 

=> 세계적인 표준으로서의 의미가 있다

 

JavaFX는 다음의 구성요소로 이루어진다

 

1) 레이아웃(Layout) : 실제로 프로그램을 구성하는 내용을 담당 (View)

 

2) 스타일(Style) : 프로그램의 디자인 부분을 담당 (View)

 

3) 비즈니스 로직(Business Logic) : 프로그램의 기능적 부분 담당 (Model, Controller)

 

 

'Hacking > ARP 스푸핑' 카테고리의 다른 글

공부(12)  (0) 2021.09.11
공부(11)  (0) 2021.09.11
공부(9)  (0) 2021.09.10
공부(8)  (0) 2021.09.10
공부(7)  (0) 2021.09.09

패킷 전송하기

 

package main;

import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;

import org.jnetpcap.Pcap;
import org.jnetpcap.PcapIf;



public class Main {

	@SuppressWarnings("deprecation")
	public static void main(String[] args) {

		ArrayList<PcapIf> allDevs = new ArrayList<PcapIf>();
		StringBuilder errbuf = new StringBuilder();
		
		int r = Pcap.findAllDevs(allDevs, errbuf);
		if (r == Pcap.NOT_OK || allDevs.isEmpty()) {
			System.out.println("네트워크 장치를 찾을 수 없습니다. " + errbuf.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);
		}
		
		PcapIf device = allDevs.get(0);
		System.out.printf("선택한 장치: %s\n", (device.getDescription() != null) ?
				device.getDescription() : device.getName());
		
		int snaplen = 64 * 1024;
		int flags = Pcap.MODE_PROMISCUOUS;
		int timeout = 10 * 1000;
		
		Pcap pcap = Pcap.openLive(device.getName(), snaplen, flags, timeout, errbuf);
		
		byte[] bytes = new byte[14];
		Arrays.fill(bytes, (byte) 0xff);
		
		ByteBuffer buffer = ByteBuffer.wrap(bytes);
		
		if (pcap.sendPacket(buffer) != Pcap.OK) {
			System.out.println(pcap.getErr());
		}
		
		StringBuilder sb = new StringBuilder();
		for (byte b: bytes) {
			sb.append(String.format("%02x ", b & 0xff));
		}
		System.out.println("전송한 패킷: " + sb.toString());
	}

}

 

와이어샤크를 통해 패킷을 전송하는 것을 볼 수 있다

'Hacking > ARP 스푸핑' 카테고리의 다른 글

공부(11)  (0) 2021.09.11
공부(10)  (0) 2021.09.10
공부(8)  (0) 2021.09.10
공부(7)  (0) 2021.09.09
공부(6)  (0) 2021.09.09

jNetPcap으로 패킷 캡처하기

 

payload는 실제로 서버와 통신에서 어떠한 캐릭터를 주고 받을 때 그러한 데이터가 들어가는 공간

 

예를들어 우리가 어떠한 웹사이트에 접속해서 그의 사이트에 로그인을 시도 한다던지 그럴 때 어떠한 로그인 정보를

 

보낼 때 이러한 페이로드에 담아 보낸다

 

package jNetPcap3;

import java.util.ArrayList;

import org.jnetpcap.Pcap;
import org.jnetpcap.PcapHeader;
import org.jnetpcap.PcapIf;
import org.jnetpcap.nio.JBuffer;
import org.jnetpcap.nio.JMemory;
import org.jnetpcap.packet.JRegistry;
import org.jnetpcap.packet.Payload;
import org.jnetpcap.packet.PcapPacket;
import org.jnetpcap.packet.format.FormatUtils;
import org.jnetpcap.protocol.lan.Ethernet;
import org.jnetpcap.protocol.network.Ip4;
import org.jnetpcap.protocol.tcpip.Tcp;

public class Main {

	@SuppressWarnings("deprecation")
	public static void main(String[] args) {

		ArrayList<PcapIf> allDevs = new ArrayList<PcapIf>();
		StringBuilder errbuf = new StringBuilder();
		
		int r = Pcap.findAllDevs(allDevs, errbuf);
		if (r == Pcap.NOT_OK || allDevs.isEmpty()) {
			System.out.println("네트워크 장치를 찾을 수 없습니다. " + errbuf.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);
		}
		
		PcapIf device = allDevs.get(0);
		System.out.printf("선택한 장치: %s\n", (device.getDescription() != null) ?
				device.getDescription() : device.getName());
		
		int snaplen = 64 * 1024;
		int flags = Pcap.MODE_PROMISCUOUS;
		int timeout = 10 * 1000;
		
		Pcap pcap = Pcap.openLive(device.getName(), snaplen, flags, timeout, errbuf);
		
		if (pcap == null) {
			System.out.printf("패킷 캡처를 위해 네트워크 장치를 여는 데에 실패했습니다. 오류 : " 
					+ errbuf.toString());
			return;
		}
		
		Ethernet eth = new Ethernet();
		Ip4 ip = new Ip4();
		Tcp tcp = new Tcp();
		
		Payload payload = new Payload();
		PcapHeader header = new PcapHeader(JMemory.POINTER);
		JBuffer buf = new JBuffer(JMemory.POINTER);
		int id = JRegistry.mapDLTToId(pcap.datalink());
		
		while (pcap.nextEx(header, buf) != Pcap.NEXT_EX_NOT_OK) {
			PcapPacket packet = new PcapPacket(header, buf);
			packet.scan(id);
			System.out.printf("[ %d ]\n", packet.getFrameNumber());
			if (packet.hasHeader(eth)) {
				System.out.printf("출발지 MAC 주소 = %s\n도착지 MAC 주소 = %s\n",
						FormatUtils.mac(eth.source()), FormatUtils.mac(eth.destination()));
			}
			if (packet.hasHeader(ip)) {
				System.out.printf("출발지 IP 주소 = %s\n도착지 IP 주소 = %s\n",
						FormatUtils.ip(ip.source()), FormatUtils.ip(ip.destination()));		
			}
			if (packet.hasHeader(tcp)) {
				System.out.printf("출발지 TCP 주소 = %d\n도착지 TCP 주소 = %d\n",
					tcp.source(), tcp.destination());		
			}
			if (packet.hasHeader(payload)) {
				System.out.printf("페이로드의 길이 = %d\n", payload.getLength());
				System.out.print(payload.toHexdump());
			}
		}
		pcap.close();
	}

}

'Hacking > ARP 스푸핑' 카테고리의 다른 글

공부(10)  (0) 2021.09.10
공부(9)  (0) 2021.09.10
공부(7)  (0) 2021.09.09
공부(6)  (0) 2021.09.09
공부(5)  (0) 2021.09.09

+ Recent posts