- 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
- IPv4 8비트 * 4 => 첫번째는 1로 시작 1~255 나머지는 0~255
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"
- netstat : 네트워크 현황
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 => 악성코드