4장 인터넷 주소 처리 이원구 컴퓨터 네트워크 실험실.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

Computer Network Lab UDP 데이터그램 과 소켓 강 동 호 컴퓨터 네트워크 실험실.
Computer Network Lab 다중전송 소켓 컴퓨터 네트워크 실험실 이 희 규, 조 한 진.
Chap15 네트워킹 Section 1 : 네트워킹의 개요와 java.net 패키지 Section 2 : 인터넷 주소와 URL Section 3 : TCP 소켓 Section 4 : UDP 소켓.
Chap15 네트워킹 Section 1 : 네트워킹의 개요와 java.net 패키지 Section 2 : 인터넷 주소와 URL
컴퓨터와 인터넷.
Part TCP / IP(계속) 3. IP 주소 4. IP 라우팅 5. 응용 프로토콜.
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
네트워크 프로그래밍 및 실습.
10. 예외 처리.
김태원 심재일 김상래 강신택. 김태원 심재일 김상래 강신택 인터넷 통신망의 정보를 제공하는 서비스 인터넷의 자원 및 정보는 NIC가 관리 IP주소 또는 도메인으로 정보 검색 이용자 및 통신망 관한 정보를 제공.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Ch.07-5 xml-rpc 사용하기 김상엽.
Network Lab. Young-Chul Hwang
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
Chapter 2. IP Address IP Address의 구성에 대한 자세한 설명과 함께 IP Address를 효율적으로 관리하기 위한 방법인 서브넷팅, 수퍼넷팅, VLSM 등에 대해서 단계별로 접근할 수 있다. 몇가지 예제를 통해서 서브넷팅에 대한 개념을 정리하고.
Chap11 네트워킹 11.1 네트워킹의 개요와 java.net 패키지 11.2 인터넷 주소와 URL 11.3 TCP 소켓
24 장 TCP/IP 24.1 개요 24.2 네트워크층 24.3 주소 지정 24.4 서브넷팅틍
IPv6 주소체계.
Chapter 03. 소켓 주소 구조체 다루기.
3. 자바에서 지원하는 패키지 자바에서 기본적으로 제공하는 패키지.
Lesson 5. 레퍼런스 데이터형.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
제 14장 Multicast & Broadcast
JAVA 프로그래밍 12장 네트워킹(Networking).
Lesson 9. 예외처리.
31강 JAVA 네트워크 JAVA 네트워크 InetAdress, URLConnection 클래스 Socket의 이해
네트워킹 CHAPTER 13 Section 1 네트워킹의 개요와 java.net 패키지 Section 2 인터넷 주소와 URL
명품 JAVA Programming 제 16 장 네트워크.
Lesson 6. 형변환.
명품 JAVA Programming 제 16 장 네트워크.
Chapter 21 Network Layer: ARP, ICMP (IGMP).
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
01. DHCP의 개념 조직의 네트워크에 연결되어 있는 워크스테이션의 TCP/IP 설정을 자동화하기 위한 표준 프로토콜
Lesson 7. 클래스와 메소드 - 1.
Chapter 03. 소켓 주소 구조체 다루기.
자바 5.0 프로그래밍.
15장 네트워킹 15.1 네트워킹의 개요와 java.net 패키지 15.2 인터넷 주소와 URL 15.3 TCP 소켓
Chapter 5 UDP Socket 소켓 프로그래밍.
Method & library.
인터넷응용프로그래밍 JavaScript(Intro).
Lesson 4. 수식과 연산자.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
제 15 장 BOOTP와 DHCP BOOTP 15.2 동적 호스트 설정 프로토콜.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
자바 암호 프로그래밍 Java Cryptography Programming
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
8장 쿠키와 세션 한빛미디어(주).
오라클 넷(Oracle Net)의 개념 및 구성
TCP/IP 인터네트워킹 INTERNETWORKING with TCP/IP <vol
16 장 네트워크 보안 : 방화벽과 VPN 16.1 개요 16.2 기밀성 16.3 전자 서명 16.4 인터넷 보안
자바 5.0 프로그래밍.
자바 5.0 프로그래밍.
Power Java 제11장 상속.
01. 라우팅 및 원격 액세스의 개요 라우팅은 패킷을 송신지부터 수신지까지 어떠한 경로를 통해 보낼 것인지를 결정하는 방법
CHAP 21. 전화, SMS, 주소록.
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
01. DHCP의 개념 조직의 네트워크에 연결되어 있는 워크스테이션의 TCP/IP 설정을 자동화하기 위한 표준 프로토콜
01. 개요 네트워크에 있는 컴퓨터와 그룹에 대한 NetBIOS 이름에 대응되는 IP 주소를 찾아주는 서비스
Chapter 27 Mobile IP.
라우터의 이해 (보충자료) TCP/IP구성 Ping명령어를 이용한 연결검사 비트와 바이트 10진수/2진수/16진수
통신프로토콜 전산정보학부 모바일인터넷과 권 춘 우
MIDP 네트워크 프로그래밍 ps lab 김윤경.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
6 객체.
ARP.
Presentation transcript:

4장 인터넷 주소 처리 이원구 컴퓨터 네트워크 실험실

4장. 인터넷 주소 처리 DNS, IP주소, 그리고 모든 것 InetAddress 클래스 IP주소를 호스트 이름으로 전환하기 유용한 프로그램들

DNS, IP 주소, 그리고 모든 것 기본 용어 호스트 포트 IP 주소

DNS, IP 주소, 그리고 모든 것(계속) 호스트 인터넷에 연결된 장치들. 호스트는 컴퓨터, 라우터, 프린터, 팩스장치, 워크스테이션, 등등을 지칭.

DNS, IP 주소, 그리고 모든 것(계속) 포트 호스트는 단 하나의 IP 주소를 가짐. 다른 호스트들과 통신하기 위해 하나의 호스트에 할당된 논리적인 개념.

DNS, IP 주소, 그리고 모든 것(계속) IP 주소 모든 호스트는 4 바이트의 유일한 IP주소로 식별 .

DNS, IP 주소, 그리고 모든 것(계속) 도메인 이름과 IP주소 상대 컴퓨터를 지정하는 방식 도메인 이름 IP 주소 사람이 사용할 수 있도록 기억하기 쉽게 영문 사용 IP 주소 컴퓨터가 처리하기 쉽게 지정된 크기의 숫자 사용

DNS, IP 주소, 그리고 모든 것(계속) 도메인 이름 예 사용자 이름 host.domain hostname.department.organization.classification.country 예 Bora.dacom.co.kr Spacelink.rmsfc.nasa.gov 사용자 이름 username@host.domain wglee@cse.hannam.ac.kr

DNS, IP 주소, 그리고 모든 것(계속) Domain Name System(DNS) 숫자형 주소를 www.blackstar.com 또는 “star.blackstar.com” 와 같은 이름으로 매핑하는 시스템. 각 사이트는 도메인 이름을 IP 주소로 변환. 분산 데이터베이스.

DNS, IP 주소, 그리고 모든 것(계속) DNS 데이터 베이스 구조 UK FR JP KR NET COM EDU GOV AC NM RE SUN HANNAM KAIST EVE ADAM LINTON CSE OR

DNS, IP 주소, 그리고 모든 것(계속) IP 주소 인터넷 숫자 클래스 점으로 구분된 4자리 숫자(4bytes) 207.247.39.35 128.134.1.1 클래스 A B C D E

DNS, IP 주소, 그리고 모든 것(계속) 주소 형식 7 비트 24 비트 1 netid hostid 14 비트 16 비트 1 클래스A 1 netid hostid 14 비트 16 비트 클래스B 1 netid hostid 21 비트 8 비트 클래스C netid hostid 1 1 28 비트 클래스D 1 1 1 0 멀티캐스트 그룹 ID 27 비트 클래스E 1 1 1 1 0 ( 나중에 사용하기 위해 예약 )

DNS, IP 주소, 그리고 모든 것(계속) 주소 범위 A 0.0.0.0 ~ 127.255.255.255 클래스 범 위 A 0.0.0.0 ~ 127.255.255.255 B 128.0.0.0 ~ 191.255.255.255 C 192.0.0.0 ~ 223.255.255.255 D 224.0.0.0 ~ 239.255.255.255 E 240.0.0.0 ~ 247.255.255.255

DNS, IP 주소, 그리고 모든 것(계속) 주소 클래스 클래스 A 클래스 B 클래스 C 128개 할당 가능 대형 네트워크 사용 클래스 B 65,532 호스트 : 256개의 C Class에 해당 중형 네트워크(대형 기관)에 적용 얻기 곤란, 다수의 C Class로 대체 클래스 C 254개의 호스트 소형 네트워크에 적용 바닥 상태에 근접

DNS, IP 주소, 그리고 모든 것(계속) 도메인 이름과 IP주소 대응 네트워크의 IP주소 관리 조직 1 : 1 대응이 원칙 InterNIC(Internet Network Information Center) 등록서비스, 디렉토리와 데이터베이스, 정보서비스 KRNIC 국내의 IP주소와 도메인 이름 할당

DNS, IP 주소, 그리고 모든 것(계속) IPv6의 등장배경 라우팅 및 주소지정 기능의 확장 헤더 형식의 단순화 옵션기능의 개선 QUS(Quality of Service)제어기능 추가 인증 및 보안기능

DNS, IP 주소, 그리고 모든 것(계속) 라우팅 및 주소지정 기능의 확장(128비트) Register ID Provider ID Subscriber ID Subnet ID Interface ID 010 1111111010 0000 0000 IPv4 address Flag Scop Group ID 11111111 3 n m o p 125-n-m-o-p Bits 10 118-n 118-n-m 96 32 Subnet Prefix 0000 0000 128-n 8 4 112 (c) Site-local address (f) Multicats address (a) Provider-Based Global unicast address (b) Link-local address (d) IPv4-compatible IPv6 address (e) Subnet –router anycast address

DNS, IP 주소, 그리고 모든 것(계속) 헤더 형식의 단순화 IPv4의 헤더 중 일부 삭제, 일부 옵션 주소는 4배 증가했으나 헤더는 2배만 증가

Destination Address(128) DNS, IP 주소, 그리고 모든 것(계속) IPv4와 IPv6 헤더 비교 Version(4) Prio(4) Flow Label(24) Payload Length(16) Next Header(8) Hop Limit(8) Source Address(128) Destination Address(128) 40 Octets 0 or more IPv6 Header Extension Header … Extension Header Transport-level PDU

DNS, IP 주소, 그리고 모든 것(계속) 옵션 기능의 개선 QOS 제어기능 인코딩 방법 개선 옵션 영역의 길이 제한 개선 새로운 옵션 추가 기능 QOS 제어기능 IPv4에 존재하지 않는 새로운 기능 추가 송신측의 특별한 QOS 표시 가능 실시간 서비스, 멀티미디어 서비스 용이

DNS, IP 주소, 그리고 모든 것 인증 보안기능 IPSEC AH(Authentication Header) EPS(Encapsulation Security Payload) IPv4 옵션, IPv6필수 인증, 무결성, 기밀성 서비스 제공

InetAddress 클래스 Java.net 패키지 ContenHandler DatagramPacket DatagramSocket MulticastSocket DatagramSocketImpl InetAddress Object SeverSocket Socket SocketImpl URL URLConnection HttpURLConnection URLEncoder URLStreamHandler

InetAddress 클래스(계속) InetAddress 클래스 java.net.InetAddress클래스는 IP 주소 표현. 숫자형 주소를 호스트 이름으로, 호스트 이름을 숫자형 주소로 변환 호스트를 식별학기 위해 소켓이나 서버소켓과 같은 다른 네트워크 클래스에 의해 사용

InetAddress 클래스(계속) InetAddress 클래스의 주요 메소드 메소드 설명 메소드 설명 boolean equals(InetAddress other) 현 객체가 other 객체와 같은 주소를 가지면 true, 아니면 false를 반환 byte[] getAddress() 주소를 나타내는 4개의 요소를 가진 바이트 배열을 반환 String getHostAddress() 주소 정보를 나타내는 문자열을 반환 String getHostName() 컴퓨터 이름을 나타내는 문자열을 반환 InetAddress getLocalHost() 현재 컴퓨터를 나타내는 InetAddress 객체를 반환 throws UnknownHostException InetAddress getByName(String hostName) hostName으로 지정된 컴퓨터를 나타내는 throws UnknownHostException InetAddress 객체를 반환 InetAddress[] getAllByName(String hostName) hostName으로 지정된 모든 컴퓨터(하나의 도메인 throws UnknownHostException 이름으로 여러 대의 컴퓨터를 사용하는 경우)를 나타내는 InetAddress 객체들의 배열을 반환

InetAddress 클래스(계속) 새로운 InetAddress 객체 생성하기 공용(public) 생성자가 없음. 3개의 정적 메소드가 존재.

InetAddress 클래스(계속) Public static InetAddress InetAddress.getByName(String hostname) 호스트 이름을 인자로 넘겨 받아, 이에 매칭되는 IP주소를 찾기 위해 DNS 이용. 호출 예 InetAddress address = InetAddress.getByName(“www.oreilly.com”)

InetAddress 클래스(계속) 예제 4.1: www.oreilly.com 의 주소를 출력하는 프로그램 import java.net.*; class oreilly { public static void main (String args[]) { try { InetAddress address = InetAddress.getByName("www.oreilly.com"); System.out.println(address); } catch (UnknownHostException e) { System.out.println("Could not find www.oreilly.com"); } } } InetAddress 객체를 생성 호스트를 발견하지 못하면 getByName() 메소드는 UnknownHostException을 발생 출력 결과 www.oreilly.com/204.148.40.9

InetAddress 클래스(계속) 예제 4.2 : 204.29.207.217의 주소를 출력하는 프로그램 import java.net.*; class OreillyByAddress { public static void main (String args[]) { try { InetAddress address = InetAddress.getByName("204.29.207.217"); System.out.println(address); } catch (UnknownHostException e) { System.out.println("Could not find 204.29.207.217"); 호스트 이름이 없는 기계에 접속할 때 수치형 IP주소가 문자열 형태로 전달 출력 결과 : 204.29.207.217/ 204.29.207.217

InetAddress 클래스(계속) 그 외의 메소드 public static InetAddress[ ] getAllByName (String host) throws UnknownHostExeption public static InetAddress getLocalHost ( ) throws UnknownHostExeption

InetAddress 클래스(계속) Public static InetAddress InetAddress.getAllByName(String hostname) 호스트 이름과 매칭되는 모든 InetAddres를 담고 있는 배열을 반환 호출 예 InetAddress address = InetAddress.getAllByName(“www.ora.com”)

InetAddress 클래스(계속) 예제 4.3 : www.apple.com의 모든 주소를 출력하는 프로그램 import java.net.*; class apple { public static void main (String args[]) { try { InetAddress[] addresses = InetAddress.getAllByName("www.apple.com"); for (int i = 0; i < addresses.length; i++) { System.out.println(addresses[i]); } catch (UnknownHostException e) { System.out.println("Could not find www.apple.com"); 호스트 이름과 매칭되는 모든 InetAddres를 담고 있는 배열을 반환 출력 결과 : www.apple.com/17.254.0.91

InetAddress 클래스(계속) Public static InetAddress InetAddress.getLocalHost( ) 프로그램이 실행되고 있는 호스트의 InetAddress 반환 호출 예 InetAddress thisComputer = InetAddress.getLocalHost( );

프로그램이 실행되고 있는 호스트의 InetAddress 반환 예제 4.4: 로컬 호스트의 주소 찾기 import java.net.*; class myAddress { public static void main (String args[]) { try { InetAddress address = InetAddress.getLocalHost(); System.out.println(address); } catch (UnknownHostException e) { System.out.println("Could not find this computer's address."); 프로그램이 실행되고 있는 호스트의 InetAddress 반환 출력 결과 : sec/203.247.39.35

InetAddress 클래스(계속) InetAddress 객체를 얻는 기타 방법 DatagramPacket.getAddress( ) ServerSocket.getInetAddress( ) SocketImpl.getInetAddress( ) Socket.getInetAddress( )

InetAddress 클래스(계속) 필드 값 구하기 public String getHostName( ) public byte[ ] getAddress( )

InetAddress 클래스(계속) public String getHostName( ) 호스트 이름이 없는 경우, 수치형 IP주소가 문자열 형태로 반환.

출력 결과 : Hello. My name is sec InetAddress 클래스(계속) 예제 4.5: 로컬 호스트의 호스트 이름을 찾는다. import java.net.*; class myName { public static void main (String args[]) { try { InetAddress address = InetAddress.getLocalHost(); System.out.println("Hello. My name is " + address.getHostName()); } catch (UnknownHostException e) { System.out.println("I'm sorry. I don't know my own name."); InetAddress 객체의 호스트 이름을 포함하고 있는 문자열을 반환. 출력 결과 : Hello. My name is sec

InetAddress 클래스(계속) public byte[ ] getAddress( ) 기계의 IP주소를 알기 위한 메소드

InetAddress 클래스(계속) 예제 4.6: 로컬 기계의 IP주소 찾기 class MyAddress6 { public static void main (String args[]) { try { InetAddress thisComputer = InetAddress.getLocalHost(); byte[] address = thisComputer.getAddress(); System.out.print("My address is "); for (int i = 0; i < address.length; i++) { int unsignedByte = address[i] < 0 ? address[i] + 256 : address[i]; System.out.print(unsignedByte + "."); } System.out.println(); IP주소를 바이트 배열의 형태로 반환 부호없는 바이트의 처리 부분 출력 결과 : My address is 203.247.39.35.

InetAddress 클래스(계속) 객체 메소드들 public boolean equals(Object anyobject) public int hashCode( ) Public String toString( )

InetAddress 클래스(계속) public boolean equals(Object anyobject) 동일 객체 검증 메소드 InetAddress 클래스의 인스턴스이고, 4바이트의 IP주소가 동일. 호스트 이름이 같을 필요는 없음.

출력 결과 : Host lookup failed. InetAddress 클래스(계속) 예제 4.7: spacecadet와 macfaq 는 같은가? class macfaq { public static void main (String args[]) { try { InetAddress macfaq = InetAddress.getByName("www.macfaq.com "); InetAddress spacecadet = InetAddress.getByName("spacecadet.cnet.com"); if (macfaq.equals(spacecadet)) { System.out.println ("www.macfaq.com is the same as spacecadet.cnet.com");} else { ("www.macfaq.com is not the same as spacecadet.cnet.com");} } 두 객체가 같으면 true, 다르면 false 출력 결과 : Host lookup failed.

InetAddress 클래스(계속) public int hashCode( ) hashAddress객체가 해시 테이블의 키로 사용될 경우 필요한 정수 값 반환. Java.util.Hashtable의 메소드에 의해 호출. Address 필드의 값 반환. 16바이트 주소로의 수정이 어려움.

InetAddress 클래스(계속) Public String toString( ) 생성 문자열 [호스트 이름/]IP주소 사용법 InetAddress thisComputer = InetAddress.getLocolHost( ) String address = thisComputer.toString( );

IP 주소를 호스트 이름으로 변환하기 리버스 룩업(Reverse lookup) 152,2,22,3과 같은 IP 주소를 sunsite.unc.edu와 같은 호스트 이름으로 변환하기 자바 1.0에서는 지원하지 않음

InetAddress객체를 만들기 위해 {199.1.32.90}와 같은 배열을 사용한다 IP주소를 호스트 이름으로 변환하기 예제 4.8 : IP주소로부터 호스트 이름 구하기 package java.net; import java.util.StringTokenizer; public class InetAddressFactory { public static InetAddress newInetAddress(byte addr[]) throws UnknownHostException { try { InetAddress ia = new InetAddress(); ia.address = addr[3] & 0xFF; ia.address |= ((addr[2] << 8) & 0xFF00); ia.address |= ((addr[1] << 16) & 0xFF0000); ia.address |= ((addr[0] << 24) & 0xFF000000); return ia; } InetAddress객체를 만들기 위해 {199.1.32.90}와 같은 배열을 사용한다

IP주소를 호스트 이름으로 변환하기 host 199.1.32.90 public static InetAddress newInetAddress(String s) throws UnknownHostException { int num_bytes_in_an_IP_address = 4; byte addr[] = new byte[num_bytes_in_an_IP_address]; StringTokenizer st = new StringTokenizer(s, "."); if (st.countTokens() != addr.length) 예외 처리 부분; for (int i = 0; i < addr.length; i++) { int thisByte = Integer.parseInt(st.nextToken()); if (thisByte < 0 || thisByte > 255) { if (thisByte > 127) thisByte -= 256; addr[i] = (byte) thisByte; return newInetAddress(addr); } // end newInetAddress } // end InetAddressFactory IPv6를 고려 표시형식이 정확한지 검사 host 199.1.32.90 Star.blackstar.com

IP주소를 호스트 이름으로 변환하기 예제 4.9 : 주소가 주어지면 호스트 이름을 찾는다. public class ReverseTest { public static void main (String args[]) { byte[] xcluster = {18, 81, 0, 21}; try { InetAddress ia = InetAddressFactory.newInetAddress(xcluster); System.out.println(ia.getHostName()); } catch (Exception e) { System.err.println(e); } String sunsite = "152.2.22.3"; InetAddress ia = InetAddressFactory.newInetAddress(sunsite); System.out.println(ia.getHostName()); } System.err.println(e); } } } Host 18.81.0.21 Host not found Host 152.2.22.3 Helios.oit.unc.edu

유용한 프로그램들 Java lookup 호스트 이름과 IP주소를 상호 변환하게 하는 유닉스 유틸리티 모드 대화형(interactive) 모드 명령행(command-line)모드

유용한 프로그램들(계속) 예제 4.10 : javalookup public class javalookup { public static void main (String args[]) { if (args.length > 0) { // use command line for (int i = 0; i < args.length; i++) { lookup(args[i]); } } else { DataInputStream myInputStream = new DataInputStream(System.in); System.out.println ("Enter names and IP addresses. Enter \"exit\" to quit."); while (true) { String s; try { s = myInputStream.readLine(); } catch (IOException e) { break; } if (s.equals("exit")) break; lookup(s); } } } /* end main */

유용한 프로그램들(계속) private static void lookup(String s) { InetAddress thisComputer; byte[] address; try { thisComputer = InetAddress.getByName(s); address = thisComputer.getAddress(); } catch (UnknownHostException ue) { System.out.println("Cannot find host " + s); return; } if (isHostname(s)) { for(int i = 0; i < address.length; i++){ int unsignedByte = address[i] < 0 ? address[i] + 256 : address[i]; System.out.println(InetAddressFactory.newInetAddress(s).getHostName()); } // 예외 처리부 } } } //end lookup IP주소의 바이트 배열을 얻는다 IP주소를 출력한다

유용한 프로그램들(계속) private static boolean isHostname(String s) { cahr[] ca = s.toCharArray(); for(int i = 0;i < ca.length; i++) { if (!Character.isDigit(ca[i])) { if (ca[i] != '.') { return true; } // 모든 문자가 숫자이거나, 마침표이므로 s는 점으로 4분된 IP주소이다 return false; } //end isHostName }//end javalookup 문자 중에 숫자가 아니거나 마침표가 아닌 것이 발견되면 s는 호스트 이름일 것이다

유용한 프로그램들(계속) 실행 결과 실행 결과 host shock.njit.edu host shock.njit.edu Host not found host 128.235.252.184 host Hertz.njit.edu host 128.235.251.11 Mail-gw3.njit.edu Host cs.nyu.edu 128.122.80.79 실행 결과 host shock.njit.edu 128.235.252.184 host 128.235.252.184 Shock.njit.edu host Hertz.njit.edu 128.235.251.11 host 128.235.251.11 Hertz.njit.edu Host cs.nyu.edu 128.122.153.79

유용한 프로그램들(계속) 웹 서버 로그 파일 처리하기 원격 호스트의 IP주소 기록 호스트 이름 기록을 위한 환경 제공

유용한 프로그램들(계속) 표준 로그 파일 형식 Remotehost rfc931 authuser[date] “request” status byte Remotehost : 클라이언트의 호스트 이름 또는 IP주소 Authuser : 인증에 사용된 사용자 이름 [date] : 요청이 이루어진 날짜와 시각 “request” : 클라이언트에서 전송되어온 요청 내용 Status : 숫자로된 HTTP 상태 코드 Byte : 클라이언트에게 보내진 파일의 크기

유용한 프로그램들 예제 4.11: 웹 서버 로그 파일 처리하기 class weblog { public static void main(String args[]) { InetAddress thisAddress; try { FileInputStream fin = new FileInputStream(args[0]); DataInputStream myInput = new DataInputStream(fin); while ((thisLine = myInput.readLine()) != null) { index = thisLine.indexOf(" ", 0); thisIP = thisLine.substring(0, index); theRest = thisLine.substring(index, thisLine.length()); try { thisAddress = InetAddress.getByName(thisIP); address = thisAddress.getAddress(); System.out.println(InetAddressFactory.newInetAddress(address).getHostName() + theRest); }//예외처리부 및 IO예외 처리부