프로젝트의 기본 설정에 대한 부분을 다루고자 하며, Color나 Font등은 사용자의 취향에 따라 갈리므로 따로 다루지 않고 '기본Setting' 만 다루고자 합니다.

먼저, Project의 File메뉴에서 Settings을 눌러서 아래와 같은 화면을 띄워줍니다.


Editor - General 에 Auto Import라는 부분이 있습니다. 말그대로 import가 필요한 부분이 있으면 자동으로 import 해줄 수 있게 설정하는 부분입니다.

빨갛게 표시된 부분을 둘다 체크해 주면 자동import기능이 완성됩니다.


이후 왼쪽 네비게이션바에서 아래로 내리다보면 File Encodings 라는 부분이 있습니다. 여기서 UTF-8로 기본 설정이 되있을 텐데 그래도 다시한번 확인해보고, 하단의 Transparent native ... 부분에 대해 체크해줍니다.


프로젝트에서 Line Numbers를 확인하기 위해 설정해주는 부분으로 표시된 부분에 체크해주면 됩니다.


저는 Eclipse를 사용하던 유저로 단축키에 적응된 부분이 있어서 왼쪽 네비게이션바에서 Keymap을 선택 후,

표시된 부분을 default -> eclipse 로 변경해주면 단축키 설정이 바뀌게 됩니다.

필요에 따라서 이곳에서 단축키 설정을 직접 바꿔 주면 되고 이상으로 OK버튼을 눌러 지금까지의 설정을 적용시켜 주면 됩니다.


이후, New Project를 하여 Empty Project가 아닌 Java Project를 만들어 줍니다.

Java Project를 누르게 되면 Project SDK라는 부분이 있습니다. 이 부분에 우측의 New... 버튼을 클릭 한 후, 본인의 JDK가 설치된 디렉토리를 경로로 설정해 주고 next버튼을 눌러 진행합니다. 

Project name에 이름을 적어준 후, Finish를 눌러주면 Java Project가 만들어지게 됩니다.



아래는 프로젝트 생성 후, 단순히 hello를 찍어본 화면입니다. 아래의 콘솔에서 hello가 찍히는 모습을 볼 수 있습니다.


WRITTEN BY
SiriusJ

,

Intellij를 설치하는 법을 다루도록 하겠습니다.


먼저 Intellij 의 공식홈페이지입니다. ( https://www.jetbrains.com/idea/ )

해당 URL로 접속한 뒤, 바로 DOWNLOAD를 눌러주면 아래 페이지로 넘어갑니다.


여기서, 윗부분이 조금 짤렸지만, JVM, Android development부분의 download를 눌러주면 무료로 사용하실 수 있습니다.

오른쪽의 enterprise는 훨씬 더 다양하게 지원해주지만, 30일까지 무료이고, 이후부터는 유료로 사용해야 합니다.


다운로드받은 exe파일을 실행시키면 다음과 같은 화면이 나오고, next버튼을 눌러 계속 진행해주면 됩니다.

프로그램이 설치되는 경로로, 별다른 이유가 아니라면 계속 next를 눌러줍니다.


사용자의 PC에 따라 32bit/64bit를 선택해주면 됩니다. 저는 64bit를 선택했습니다.


이후 설치가 완료되면 아래와 같이 되고, run을 선택 후 finish 버튼을 클릭해주어 실행해줍니다.


저는 처음 사용하는 것이므로 아래를 선택한 후, OK를 눌러줍니다.


ACCEPT를 눌러줍니다. Reject and Exit를 누를시 당연히.... 꺼지겠죠?


개인적으로 BLACK계열의 색상을 좋아하는 편이라, Eclipse에서 처럼 Darcula를 선택한 후 우측하단의 Next Default plugins 를 눌러줍니다. 기본색상을 좋아하신다면 Intellij 를 하셔도 됩니다.


특별히 설정할 것이 없다면, 계속 Next를 눌러서 진행해줍니다.





IntelliJ화면은 뭔가 화려하고 예쁜것같습니다.ㅎㅎ


먼저, 실행하면 나오는 화면으로 Create New Project를 선택해 프로젝트를 생성해줍시다.


다음과 같은 화면에서 먼저 Empty Project를 선택한 후, next를 클릭합니다.


이름은 저는 Empty라고 지은 후, Finish를 눌러서 프로젝트를 생성하겠습니다.


Module을 추가할 것인지 물어보는 부분인데, 추가할 것이면 중앙 네비게이션 상단부의 +를 클릭하면 되지만 저는 일단 추가하지 않고 OK를 눌러주겠습니다.


여기까지 진행하면, 다음과 같이 빈 프로젝트가 생성되는 것을 확인할 수 있습니다.


다음번에는 IntelliJ의 여러 설정을 잡는 부분을 진행하겠습니다.


WRITTEN BY
SiriusJ

,

이전 포스팅에서 프로그래머/개발자가 패킷분석 툴로 Wireshark를 이용하여 여러가지 프로토콜 분석을 해본 바 있습니다.

이번에는 조금 더 활용하여 Wireshark를 PC에서 실행시켜 웹 브라우저에서 특정 홈페이지를 방문하여 패킷들을 캡쳐 한 후, 웹 서버의 80번 포트와 통신하는 TCP Segment만 필터링 해보겠습니다.

그러면 TCP Connection을 설정하는 과정과 해지하는 과정, HTTP 요청 메시지(Request Message), 응답메시지(Response Message)만 나타날 것입니다.

저는 모교의 정보통신공학과 홈페이지(http://ice.hufs.ac.kr)를 방문하도록 하겠습니다.


[ TCP connection 설정과 해지, HTTP 요청 메시지와 응답 메시지가 교환되는 과정을 그림으로 도시 ]



- 먼저, Wireshark에서 Protocol Hierarchy 를 확인하면 아래의 그림과 같이 Frame 내에 Ethernet frame, 그 내에 IP datagram, 그 내에 TCP segment가 있고 그 내부에는 HTTP를 확인할 수 있습니다.



이것을 아래의 그림으로 도시할 수 있습니다.



이를 분석해서 저의 PC와 해당 웹 서버의 IP address port number를 알아내도록 해보겠습니다. 또한, Ethernet frame을 보고 제 PC MAC address와 인접한 노드의 MAC 주소를 알아내도록 하겠습니다. 

(HTTP 서버는 TCP 프로토콜 위에서 port 번호 80번을 이용)


3. 먼저, 해당 사이트에 접속했을 때의 패킷을 캡쳐한 화면입니. 여기서 제 PCIP192.168.0.43 로 확인할 수 있고, 해당 사이트의 IP203.253.68.121 이라는 것을 알아낼 수 있습니다.

그리고 해당 사이트의 포트번호는 TCP 프로토콜 위에서 port 번호 80번을 이용하므로 80번으로 확인할 수 있습니다.


마지막으로 내 PC에서 인접한 노드의 MAC Address를 알기 위해아래의 그림을 참고하면 IP Packet안에 Destination address는 웹 서버의 IP지만, Ethernet Frame의 Destination address는 next-hop의 MAC address입니다.

내 PC MAC Address : 20:68:9d:c5:60:d6

근첩 노드의 MAC Address : 00:08:9f:d3:bd:c9

를 확인할 수 있습니다.

'ETC' 카테고리의 다른 글

Code Refactoring (코드 리팩토링)  (0) 2016.07.08
IntelliJ 프로젝트 기본 설정  (0) 2016.05.03
IntelliJ 설치 및 프로젝트 생성  (0) 2016.05.03
Wireshark를 이용한 패킷 분석  (2) 2016.04.26

WRITTEN BY
SiriusJ

,

프로그래머/개발자라면 한번쯤은 사용해보았을 법한 패킷분석 툴인 Wireshark를 한번 다뤄보려 합니다.

Wireshark는 패킷을 추출하여 분석할 수 있는 기초적인 툴입니다.

이 Wireshark를 사용하여 Packet Capture를 한 뒤, Protocol Packet을 분석하여 각 Protocol Packet Structure에 해당 하는 값을 적고, 각 Protocol Packet Structure의 부분들을 조사하여 어떤 역할을 하는지 살펴보도록 하겠습니다.


1) TCP Protocol

(1) wireshark에서 패킷 캡쳐링을 실시 한 후, 화면에서 Protocol 영역 중에 TCP를 찾아서 클릭하면 TCP에 관한 정보가 나오게 됩니다.


(2)

-(Src Port)Source port (발신지 포트 필드) : 발신지 포트필드는 발신지에서 오픈된 포트입니다. 위의 패킷을 보면 https 포트 (443) 인 것을 확인할 수 있습니다.

 

-(Dst Port)Destination port (목적지 포트 필드) : 목적지 포트필드는 수신지에서 오픈된 포트입니. 위의 패킷을 보면 51462 포트인 것을 확인할 수 있습니다.

 

-(Seq)Sequence number (순차 번호 필드) : 순차번호필드는 고유한 번호를 가지며, 이 값으로 TCP 세그먼트에 대한 식별값을 제공하며, 통신 스트림일부가 분실되면 확인을 위해 수신자를 사용가능하게 합니다. 이 순차번호는 패킷에 포함되있는 데이터 만큼 증가하게 됩니다. 화면에서는 15631의 값을 가집니.

 

-(Ack)Acknowledgment number (확인 응답 번호 필드) : 확인 응답 번호 필드는 다음번에 기대되는 순차번호를 표시한다. ack number에 관련하여 1078의 값을 가지게 됩니다.

-Header length (데이터 오프셋 필드) : 데이터 오프셋필드는 TCP헤더의 길이를 정의합니. 길이는 4byte씩 증가되고, 이 필드의 값이 20이면 80바이트 길이를 갖는다는 것입니다. TCP헤더의 길이가 다양하게 변화시킬 필요가 있으므로 이 필드가 필요하게 됩니다.

 

(3)

URG (Urgent) : 긴급 포인터

ACK (Acknowledgment) : 확인 응답 패킷

PSH (Push) : 네트워크에서 버퍼링 우회와 데이터 즉시 통과

RST (Reset) : 연결 닫기

SYN (Synchronize) : 동기화 순차번호

FIN (Finish) : 트랜잭션 종료

 

<위 플래그들에 대한 설명>

(긴급비트 (Urgent))

이 비트는 잘 사용되지는 않습니다. 만약 이 비트가 1로 설정 된 경우 긴급 포인터 필드로 정의되는 특정위치에서 시작하는 패킷의 데이터를 알기 위해 발신자가 원하는 수신자를 나타냅니다.

 

(확인 응답 비트 (ACK))

이 비트가 설정되어 있으면(bit‘1’인 경우) 이 패킷은 확인응답이라는 것을 나타냅니다.

 

(Push 비트 (PSH))

이 플래그는 TCP 세그먼트가 발신자나 수신자의 측면에서 버퍼에 유지되면 안 된다는 것을 표시합니다.

 

(Reset 비트 (RST))

RST 비트 설정에 대한 TCP 패킷은 TCP 연결을 종료, 즉 접속을 강제로 종료합니다. 이 패킷은 이상 종료 시 사용됩니다.

 

(동기화 비트 (SYN))

SYN 비트는 송신측과 수신측의 일련번호를 확인할 때 사용되고 이 비트가 1이면 이 패킷은 TCP 핸드셰이크 프로세스의 SYN 단계라는 뜻입니다.

 

(Finish 비트 (FIN))

Finish 비트는 프로세스가 완료됐고 데이터 스트림이 전송 됐다는 것을 의미합니.

 

(4)

window field : 이 필드는 TCP 수신 버퍼를 바이트 크기로 표시합니. 이 바이트가 0이라면 수신자가 사용가능한 버퍼 공간을 갖지 않겠다는 말이 됩니다. 이 필드에 나타낼 수 있는 최대값은 65,535 입니다.

 

 (5)

checksum field : checksum fieldTCP 헤더와 데이터의 내용뿐만 아니라 IP 헤더로 부터 파생된 의사 헤더에 대한 내용을 수행합니.

  

2. DNS protocol

: DNS는 단일 전송 메커니즘을 사용하는 다른 애플리케이션과는 다르게 UDPTCP를 모두 사용합니. 일반적인 응답/요청은 UDP를 사용하고 전송 대역이 큰 응답/요청에는 TCP를 사용합니다.

화면에서 Protocol 영역 중에 DNS를 찾아서 클릭하여 DNS에 관한 정보를 얻습니다.

위 그림 을 보면 DNS4개의 기본 섹션으로 구성되어 있다는 것 을 알 수 있습니다.

1. 질문 (Questions), 2. 응답 (Answer), 3. 권한 (Authority), 4. 추가 (Additional)

 

이제 DNS 패킷을 위에서 부터 분석하면,

Transaction ID : DNS 쿼리와 응답에 연관되는데 사용자는 이 필드에서 DNS에 관련된 모든 것을 보기 위한 값을 필터링 할 수 있습니다. (dns.id==0x95fd)

Flags : 쿼리 특성을 정의하는 수많은 필드로 구성되어 있습니다. Flags 의 필드에 대해서 살펴보도록 하겠습니다.

Response(Query) : 쿼리/응답 비트는 요청(0) 인지 응답(1)인지 표시합니다. 위의 패킷은 0 이므로 패킷이 요청 이라는 것을 알 수 있습니다.

Opcode : Opcode는 쿼리의 유형을 지정하고 일반적으로 일반적인 요청에 대해 0000을 포함합니다.

Truncation : 응답이 길어서 잘렸는지에 대해서 알려주고, 위의 패킷을 보면 잘리지 않았다라고 나오는 것을 볼 수 있습니다.

Z (Reserved) : 이 필드는 0으로 설정됩니다.

Non-authenticated data : 데이터에 권한이 있는지를 보는 필드로, 이 필드는 0으로 설정되어 받아들일 수 없다고 나오게 됩니다.

지금까지 flag를 보았고, 이제 밑으로 넘어가서 아래 그림의 부분을 살펴보겠습니다.

 

Questions Count - 질문의 숫자를 표시하고 일반적으로 한 패킷당 1개의 질문을 볼 수 있습니다.

Answer RRs - Answer RRs 수를 표시합니다.

Authority RRs - Authority RRs 응답 수를 표시합니다.

Additional RRs - Additional RRs 응답 수를 표시합니다.

 

이제 Queries부분을 살펴보겠습니다.

 

Name : 이 필드는 결정 중인 이름을 포함합니다. 형식은 이름에서 영문자 바이트의 숫자를 표시하기 위해 숫자 구분문자를 이용하는 가변길이입니다.

Type : 쿼리의 유형을 나타내는 필드로써 현재는 A, 호스트주소를 나타내게 됩니다.


 유형은 아래의 표와 같습니다.

Class : TCP/IP 통신에 대한 인터넷 클래스 주소를 표시하기 위해 ‘1’(0x0001)로 설정됩니다.

 

3. UDP protocol

 

-> UDP는 통신프로토콜이며 비연결형 전송 서비스를 제공합니다. 한쪽에서 일방적으로 다른 쪽으로 보내는 프로토콜이다. 브로드캐스트 와 멀티캐스트 트래픽이 UDP 를 통해 전송됩니다.

화면에서 Protocol 영역 중에 UDP를 찾아서 클릭하여 UDP에 관한 정보를 얻어 보겠습니다.

 (UDP 패킷 구조 분석)

-Source port (목적지 포트 필드) : 이 필드는 응답 패킷에서 수신중인 포트를 열기 위해서 주로 사용되며 프로토콜을 정의하기 위한 목적으로 사용되며 현재 6881포트를 사용합니다.

 

-Destination port (발신지 포트 필드) : 이 필드는 목적지 애플리케이션이나 프로세스를 정의하고, 일부 경우 발신지와 목적지 포트 번호들은 클라이언트나 서버 프로세스와 같다. 현재는 목적지 포트와 같은 6881을 사용합니다.

 

-Length (길이 필드) : 이 필드는 UDP 헤더에서 유효한 데이터의 끝까지 패킷의 길이를 정의하며, 현재 화면에서 28byte를 표시합니다.

 

-Checksum (체크섬 필드) : checksum에 대한 정보를 나타내며 가끔 사용자는 checksum 필드가 모두 0 으로 설정된 것을 볼 수 있는데 이는 체크섬이 인증되지 않았다는 의미입니다.

화면에서 보다시피 허가가 거부된 것으로 표시되어집니다.

 

4. ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜)

-ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜) 은 네트워크에서 오류,경고,알림에 대한 메시지를 전달하는 목적으로 사용됩니다.

ICMP 패킷은 UDPTCP 헤더를 포함하지 않습니다. ICMP 패킷은 IP 헤더 다음에 type, code, checksum 으로

구성되어 있습니다. 일부 패킷은 추가 필드를 포함하게 됩니다.

-Type (유형) : ICMP 메시지 유형은 다음 표와 같습니다.

 위의 TYPE3이므로 목적지에 도달할 수 없다는 것을 의미합니다.

-Code : ICMP 패킷 유형의 코드 필드 값을 나타내며 크게 4가지 유형으로 나뉘어집니다.

1. 유형3 - 목적지에 도달할수 없는코드

2. 유형5 - 재지정 코드

3. 유형 11 - 시간 초과 코드

4. 유형 12 - 파라미터 문제 코드)


<1> 유형 3 - 목적지에 도달할 수 없는 코드

<2> 유형 5 - 재지정 코드

 <3> 유형 11 - 시간 초과 코드

 

  <4> 유형 12 - 파라미터 문제 코드

 


-Checksum : checksum fieldICMP 헤더만 다루게 됩니다.


WRITTEN BY
SiriusJ

,