jNetPcap 으로 MAC 주소 추출

 

package main;

import static org.jnetpcap.Pcap.NOT_OK;

import java.util.ArrayList;

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

public class Main {

	public static void main(String[] args) {

		ArrayList<PcapIf> allDevs = new ArrayList<PcapIf>();
		StringBuilder errbuf = new StringBuilder();
		
		int r = Pcap.findAllDevs(allDevs, errbuf);
		if (r == NOT_OK || allDevs.isEmpty()) {
			System.out.println("네트워크 장치를 찾을 수 없습니다. " + errbuf.toString());
			return;
		}
		
		System.out.println("[ 네트워크 장비 탐색 성공 ]");
		
		try {
		for (final PcapIf i : allDevs) {
			final byte[] mac = i.getHardwareAddress();
			if(mac==null) {
				continue;
			}
			System.out.printf("장치 주소 : %s\n 맥 주소 : %s\n", i.getName(), asString(mac));
		}
	} catch (Exception e) {
		e.printStackTrace();
		}
	}
	
	public static String asString(final byte[] mac) {
		final StringBuilder buf = new StringBuilder();
		for (byte b : mac) {
			if (buf.length() != 0) {
				buf.append(":");
			}
			if (b >= 0 && b <16) {
				buf.append('0');
			}
			buf.append(Integer.toHexString((b < 0) ? b + 256 : b).toUpperCase());
		}
		return buf.toString();
	}

}

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

공부(9)  (0) 2021.09.10
공부(8)  (0) 2021.09.10
공부(6)  (0) 2021.09.09
공부(5)  (0) 2021.09.09
공부(4)  (0) 2021.09.08

소켓 프로그래밍

 

package main;

import java.net.InetAddress;

public class Main {

	public static void main(String[] args) {
	
		InetAddress ip = null;
		try	{
			ip = InetAddress.getByName("www.google.com");
			System.out.println("호스트 이름: " + ip.getHostName());
			System.out.println("호스트 주소: " + ip.getHostAddress());
			System.out.println("내 주소: " + InetAddress.getLocalHost().getHostAddress());
		}	catch (Exception e)	{
			e.printStackTrace();
		}

	}

}

 컨트롤 쉬프트 O 를 누르면 import 부분이 생긴다

 

InetAddresss ip 값을 생성해주고 try catch 문을 이용한다

 

구글의 호스트 이름 주소 그리고 내 주소까지 출력해주고

 

만약 에러가 나면 그것을 추적하는것 까지 해준다

 

어떠한 전기 제품과 전선을 이어주는 역할을 하는것 자체를 소켓이라고 한다

 

프로그래밍에서도 마찬가지로 어떠한 연결 도구로써 작동을 한다

 

일반적으로 거의 모든프로그램은 서버를 가지고 있다

 

소켓 프로그램은 여러개 프로그램들이 서로 통신을 할 수 있게 만들어주는 하나의 프로그램인 규칙이라 할 수 있다

 

새로운 프로젝트 두개를 만들어주자

 

1. Client 2. Server 이렇게 만들어준다

 

둘다 main이라는 패키지 안에

 

Client는 Client 와 Main 클래스를 만들어주고

 

Server는 Server 와 Main 클래스를 만들어준다

 

Server의 Server.java를 먼저 작성하자

package main;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

	private BufferedReader reader;
	private ServerSocket server = null;
	private Socket socket;
	
	public void start()	{
		try	{
			server = new ServerSocket(12345);
			System.out.println("서버가 활성화되었습니다.");
			while (true) {
				socket = server.accept();
				reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				getMessage();
			}
		} catch(Exception e)	{
			e.printStackTrace();
		} finally {
			try {
				if (reader != null) reader.close();
				if (socket != null) reader.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	public void getMessage() {
		try {
			while (true) {
				System.out.println("클라이언트: " + reader.readLine());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

Client의 Client.java

package main;

import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Client {
	
	private PrintWriter writer;
	private Socket socket;
	
	public void start() {
		try {
			socket = new Socket("127.0.0.1", 12345);
			System.out.println("서버에 접속했습니다.");
			writer = new PrintWriter(socket.getOutputStream(), true);
			Scanner scan = new Scanner(System.in);
			while (true) {
				writer.println(scan.next());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 

 

Server의 Main.java

package main;

public class Main {

	public static void main(String[] args) {

		Server server = new Server();
		server.start();

	}
    
}

 

Client의 Main.java

package main;

public class Main {

	public static void main(String[] args) {
		
		Client client = new Client();
		client.start();

	}

}

 

이렇게 해주고 두 프로젝트의 Main.java를 둘 다 실행시켜주자

 

클라이언트로 입력하면 서버로 들어오는 것을 볼 수 있다

 

단어 단위로 데이터를 끊어서 보내도록 writer.println(scan.next()); 이렇게 만들어 놓았다

 

소켓 프로그램을 이용해서 작성한 것들은 실직적으로는 어떠한 패킷의 형태로써 서버와 클라이언트가

 

서로 데이터를 주고 받는것

 

물론 실제 패킷 안에 들어가 있는 정보들은 어떠한 바이트 스트림으로써 16진수 등으로 표현되어 있다

 

이것을 하나하나 계산하기 힘드니 우리가 쓰는것은 Socket 라이브러리를 사용한다

 

DNS 같은 경우는 특정한 호스트 이름을 가지고 실제 ip주소를 알아내는 하나의 프로토콜

 

 

 

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

공부(8)  (0) 2021.09.10
공부(7)  (0) 2021.09.09
공부(5)  (0) 2021.09.09
공부(4)  (0) 2021.09.08
공부(3)  (0) 2021.09.08

Wireshark 로 보게되면

 

주황색으로 보이는 것이 패킷

 

ARP 프로토콜에는 ARP request와 ARP relay

 

즉 특정한 사용자의 MAC 주소를 알아오는 ARP request 와 특정한 사용자의 MAC 주소를 알려주는 relay

 

6개의 아스키코드로 구성되어있어 ff ff ff ff ff ff 라고 나와있는 것은  브로드캐스트를 의미

 

해당 네트워크 안에 있는 모든 장비들한테 전부 다 보내겠다는 소리

 

즉 모든 자기란 뜻으로써 f가 들어가 있는 것임

 

Source 가 있는데 이것은 ARP request를 보내는 자기 자신의 MAC 주소를 의미

 

즉 보낸 맥주소를 출발지라고 할 수 있는 것

 

08 06 이라는 것은 ARP 프로토콜 이라는 것을 알려주는 약속 체계

 

00 01 은 Hardware type 으로 이더넷 이라는것을 알려준다 사실상 이거는 거의 안 바뀜

 

08 00 은 Protocol type 으로 IPv4를 뜻함 

 

ARP 프로토콜 중에서 정확한 request 라는 것을 의미하는건 00 01 

 

Sender MAC address 를 보면 보내는 사람의 맥 주소값을 알 수 있다

 

마지막 0000 ... 은 패딩값이다

 

follow - tcp stream을 이용하여 로그인 정보까지 알 수 있다

 

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

공부(7)  (0) 2021.09.09
공부(6)  (0) 2021.09.09
공부(4)  (0) 2021.09.08
공부(3)  (0) 2021.09.08
공부(2)  (0) 2021.09.08

일반적인 네트워크에서의 인터넷 접속

 

인터넷에 접속하기 위해서는 우리가 보내는 패킷이 게이트웨이(라우터)를 거쳐서 나가야 한다

 

따라서 같은 네트워크에 있는 모든 컴퓨터는 하나의 게이트웨이로 패킷을 전송한다

 

게이트웨이는 특정 컴퓨터로 들어오는 패킷을 정확히 전달한다

 

 ARP Spoofing은 크게 두 가지 과정으로 수행된다

 

1. ARP 테이블 감염시키기

 

2. 감염된 패킷 재전송(Relay)하기

 

ARP 테이블 감염시키기

 

1) 먼저 게이트웨이에게 피해자의 MAC 주소를 자신의 MAC 이라고 속인다

 

2) 이후에 피해자에게 게이트웨이의 MAC 주소를 자신의 MAC 이라고 속인다

 

이로써 중간자 공격이 성립한다

 

하지만 여기서 끝나면 안된다 감염만 시키고 끝내면 피해자는 인터넷이 되지 않는다

 

감염된 패킷 재전송(relay)하기

 

피해자 릴레이 1) 패킷을 필터링하며 피해자가 보내는 패킷을 포착한다

 

출발 MAC 주소와 출발 IP 주소는 피해자꺼 도착 MAC 주소는 해커 MAC 주소

 

 2) 패킷의 정보를 수정하여 라우터에게 재전송한다

 

출발 MAC 주소는 해커 출발 IP 주소는 피해자꺼 도착 MAC 주소는 라우터의 MAC 주소

 

라우터 릴레이 1) 패킷을 필터링하며 라우터가 피해자에게 보내는 패킷을 포착한다

 

출발 MAC 주소는 라우터의 MAC 주소 도착 MAC 주소는 해커꺼 도착 IP 주소는 피해자꺼

 

2) 패킷의 정보를 수정하여 피해자에게 재전송한다

 

출발 MAC 주소는 해커꺼 도착 MAC 주소는 피해자꺼 도착 IP주소는 피해자꺼

 

감염된 컴퓨터는 인터넷이 느려지거나 인증서 오류가 간헐적으로 발생하지만 이용에 큰 문제가 없다

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

공부(6)  (0) 2021.09.09
공부(5)  (0) 2021.09.09
공부(3)  (0) 2021.09.08
공부(2)  (0) 2021.09.08
공부(1)  (0) 2021.09.08

+ Recent posts