Java - network

2025. 2. 10. 17:44·Java
  • IP로 핸들링 : 도메인, IP(WEP, WAS)
  • IoT : 사물인터넷
  • Bluetooth : 무선통신
  • Beacon : 비콘 
  • NFC : 근거리 무선 통신 

 

    • 1. IP or 도메인 => Web Server, IP접속 
    • 2. Port -> 중복으로 사용이 불가능 (TCP, UDP)
    • 3. TCP - 외부 연결 프로토콜, 전송 속도가 빠름 
    • 4. UDP - 내부 연결 프로토콜, 전송 속도가 느림 (단, 1:1경우와 내부 네트워크 통신애서 빠름)
    • 5. IPv4, IPv6 => ipaddress4, ipaddress6
      • IPv4 8비트 * 4 => 첫번째는 1로 시작 1~255 나머지는 0~255
        • 가상 IP : 127, 17x, 19x IPv6 128비트 * 8
        • 실제 IP : 가상 IP 외의 모든 숫자 
      • IPv6 128비트 * 8

1. IP, 도메인 확인 

public class net1 {
	public static void main(String[] args) {
		try {
			InetAddress ia = Inet4Address.getByName("naver.com");	//new 안씀!
			System.out.println(ia);
			System.out.println(ia.getHostAddress());	//IP만 출력
			System.out.println(ia.getHostName());	//도메인만 출력 
			
			InetAddress ia4[] = Inet4Address.getAllByName("daum.net");
			System.out.println(Arrays.toString(ia4));
			
			InetAddress ia6[] = Inet6Address.getAllByName("naver.net");
			System.out.println(Arrays.toString(ia6));
			
			//getLocalHost : 자신에게 할당된 IP 정보를 출력 
			InetAddress iam = Inet4Address.getLocalHost();
		}catch (Exception e) {
			System.out.println("해당 IP를 확인하지 못하였습니다.");
		}
	}
}
    • net은 무조건 try~catch 필수
    • getByName : 도메인명 또는 IP를 사용해야함 (하나의 서버정보를 가져옴)
    • getAllByName : 해당 도메인일 경우 모든 서버정보를 가져옴 (배열)
    • getLocalHost : 자신에게 할당된 IP 정보를 출력
    • cmd 네트워크 명령어
      • netstat : 네트워크 현황 
        • -a : 모든 포트
        • -n : 해당 ip와 포트를 같이 보여줌 
      • find : 해당 포트를 검색하는 명령어 
        • "LISTEN" : 가동되고 있는 포트
        • "CLOSE" : 종료된 포트
      • netstat -옵션
      • netstat -옵션 tcp|find "명령어"
      • netstat -옵션 tcp|find "명령어" : TCP 리스트 
      • netstat -옵션 udp|find "명령어" : UDP 리스트 
      • netstat -an|find "LISTEN"

2. PORT 오픈

package net;

import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;

//PORT 오픈
public class net2 {
	public static void main(String[] args) {
		try {
			//ServerSocket : 서버를 오픈하는 라이브러리 (포트번호를 셋팅)
			ServerSocket ss = new ServerSocket();
			//InetSocketAddress : 해당 아이피에 포트번호를 오픈하는 형태 
			InetSocketAddress ia = new InetSocketAddress("172.30.1.82",7070);
			ss.bind(ia);	//bind : add, append 같은 추가하는 형태 -> 해당 ServerSocket에 반영시킴 
			System.out.println("연결중입니다.");
			
			//accept : 소켓으로 접속하는 메소드 
			Socket sc = ss.accept();
			
			//close : 해당 소켓을 종료 
//			sc.close();
			
			//클라이언트가 해당 아이피 및 포트로 접근시 클라이언트에게 해당 메세지를 출력
			//getRemoteSocketAddress : 서버에 접속한 사용자의 IP를 확인 
			InetSocketAddress ia2 = (InetSocketAddress)sc.getRemoteSocketAddress();
			System.out.println("연결확인");
		}catch (Exception e) {
			System.out.println("해당 서버에 문제가 발생하였습니다.");
		}
	}
}
      • ServerSocket : 서버를 오픈하는 라이브러리 (포트번호를 셋팅)
      • InetSocketAddress : 해당 아이피에 포트번호를 오픈
      • bind : 해당 ServerSocket에 반영시킴 (add, append 같은 역할)
      • accept : 소켓으로 접속하는 메소드
      • close : 해당 소텟을 종료
      • getRemoteSocketAddress : 서버에 접속한 사용자의 IP를 확인 

3. 외부 서버의 이미지 다운로드받는 통신 

package net;
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;

//https : 443포트  / http:
//외부 서버에 있는 이미지를 다운받는 통신 
// https://www.w3schools.com/css/img_lights.jpg
public class net3 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		try {
			System.out.println("웹에서 가져올 이미지 주소를 입력하세요 : ");
			String url = sc.nextLine();	//사용자가 입력한 도메인 주소
			
			URL u = new URL(url);	//URL = File : http 경로를 가져오는 역할 
			URLConnection con = u.openConnection();	//URLConnection : 해당 서버로 접근
			int imgsize = con.getContentLength();	//파일 크기 
			String imgtype = con.getContentType();	//파일 속성 
			long data = con.getDate();	//파일에 접속하는 날짜
			System.out.println(imgsize);
			System.out.println(imgtype);
			System.out.println(data);
			
			InputStream is = u.openStream();	//net전용 stream
			BufferedInputStream bs = new BufferedInputStream(is);
			byte b[] = new byte[bs.available()/1024];
			
			//다운로드 받을 경로 및 파일명 
			String copyurl = "/Users/nayeong/Documents/java_etc/ftp/";
			OutputStream os = new FileOutputStream(copyurl + "copy.png");	//lastIndexof사용하면좋음 
			
//			bs.read(b);
			
			//Binary는 int, ASCII는 String으로 받음
			int w = 0;
			while((w = bs.read(b))!= -1) {	//용량을 1024로 나눴기때문에 꼭 반복문을 이용해야함 
				os.write(b,0,w);	//0~파일 크기만큼 지속적으로 쓰기
				os.flush();				
			}
			
			os.close();
			bs.close();
			is.close();
			System.out.println("복사 완료");
		}catch (Exception e) {
			
		}finally {
			sc.close();
		}
	}
}

/*
https://abc.co.ke/223/hong.jpg => x (https불가능)
http://abc.co.ke/223/hong?jpg=ok&1234ef => x (뒤에 지저분)
http://abc.co.ke/223/hong.jpg => o
*/
      • URL = File : http 경로를 가져오는 역할
      • URLConnection : 해당 서버로 접근
        • getContentLength : 파일 크기
        • getContentType : 파일 속성
        • getDate : 파일에 접속하는 날짜 
      • openStream :net전용 stream

4. 네트워크 URL 정보 현황

코드 크롤링 다운로드

package net;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;

public class net4 {
	public static void main(String[] args) {
		String url = "https://sonyunara.com/member/join_step1.php";
		
		try {
			URL u = new URL(url);
//			URLConnection con = u.openConnection();	//해당 경로를 오픈 
			System.out.println(u.getProtocol());	//http, https, ftp ,...
			System.out.println(u.getPort());	//도메인 및 ip 이후 포트번호를 
			System.out.println(u.getHost());	//접속하는 ip 또는 도메인명 
			System.out.println(u.getFile());	//실행파일명(경로+파라미터값)
			System.out.println(u.getPath());	//현재 접속한 경로 
			System.out.println(u.getQuery());	//파라미터값
			
			//ASCII => 소스코드를 모두 다운로드 
			InputStream is = u.openStream();	//=byte
			InputStreamReader isr = new InputStreamReader(is,"utf-8");
			BufferedReader br = new BufferedReader(isr);
			
			FileOutputStream fs = new FileOutputStream("/Users/nayeong/Documents/java_etc/ftp/member.html");
			//PrintWriter :  String을 byte로 변
			PrintWriter pw = new PrintWriter(fs);	//String
			String code = "";
			while((code = br.readLine())!=null) {
				pw.println(code);
				pw.flush();
			}
			pw.close();
			fs.close();
			br.close();
			isr.close();
			is.close();		
		}catch (Exception e) {
			System.out.println("해당 사이트는 보안 접속 관계로 소스코드를 복사하지 못하였습니다.");			
		}
	}
}
        • getProtocol() : 프로토콜 종류 
        • getPort() :도메인 및 ip 이후 포트번호
        • getHost() : 접속하는 ip 또는 도메인명 
        • getFile() : 실행파일명(경로+파라미터값)
        • getPath() : 현재 접속한 경로
        • getQuery() : 파라미터값

주저리주저리

포트 2556, 2745, 4444 => backdoor (악성코드)
70 => 트로이목마 
1080, 3127, 3176 => worm (mail로 전파되는 악성코드)
4000~5000 => 악성코드 
저작자표시 비영리 변경금지 (새창열림)
'Java' 카테고리의 다른 글
  • Java - network (FTP)
  • Java - network (TCP 통신)
  • 복습11 - IO
  • Java - IO (응용)
9na0
9na0
응애
  • 9na0
    구나딩
    9na0
  • 전체
    오늘
    어제
    • 분류 전체보기 (211)
      • Web (118)
      • Java (28)
      • 데이터베이스 (14)
      • 세팅 (12)
      • 과제 (3)
      • 쪽지시험 (2)
      • 정보처리기사 (4)
      • 서버 (25)
  • 블로그 메뉴

    • 링크

      • 포폴
      • 구깃
    • 공지사항

    • 인기 글

    • 태그

      notice_writer
      exam1_1~10
      net5~10
      re_java10
      file25_t
      noticewriteok
      ab1
      net1
      net2
      file25
      file24
      Oracle
      net4
      java_io1~10
      datalist
      net3
      re2
      io_dto
      macbook pro m4
      spring-boot
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    9na0
    Java - network
    상단으로

    티스토리툴바