- NEW초롱이의 하루
- kisa
- 길은 가면, 뒤에 있다
- C언어 예술가
- Zer0 day - Zer0 day
- Information Security
- Secure-EDU
- 앙큼한유채's 일상 Story
- Library of Ezbeat (잠정 폐쇄)
- The Factory
- 안드
- 모후모후의 커뮤니티
- 공학도의 잡다한 시선
- 안드2
- IT속에 코코아
- IP주소검색(whois)
- IP주소검색(좌표포함)
- 소프트웨어 경력 관리
- 해저 케이블 지도
- MAC주소검색
- IANA
- 포트번호검색
- 자신의IP확인
- 웹페이퍼캡처
- 나의패스워드보안등급
- 웹 취약점 분석
- IT용어정리
- GitHub
- 라이브러리 모음
- 웹마당넷
- 시스템콜참고
- BCD 변환
- 보안뉴스
- 코딩도장(C, Python)
- 백준알고리즘
- 코딩테스트 연습
- 웹 사이트 테스트
- 스크립트꾸미기
- ctf대회목록
- 전자신문
- hash 크랙
- CVE
- 도메인등록
- N클라우드
- BugBountyList
- 칼리공식사이트
- CR4FTING BOX
- 아스키코드 변환
- 웹 사이트 통계 및 평가
- PDF변환
- AWS 및 클라우드 정보
- 가상화 및 서버관련
- 티오리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 쉘 스크립트 if문
- 쉘 스크립트 기초
- 리눅스
- docker
- 쉘 스크립트
- centos docker
- System
- Tkinter
- 자바
- API
- 그라파나
- 네트워크
- 프로젝트
- Python
- 라즈베리파이
- 안드로이드
- 클라우드
- synology
- RaspberryPi
- Java
- JSP
- ACL
- Android
- LEVIATHAN
- GUI
- GPIO
- Linux
- nginx
- 메소드
- Shell script
- Today
- Total
IT창고
Network UDP 클라이언트/서버 프로그램 본문
네트워크프로그래밍이란?
네트워크 프로그래밍은 다른말로 소켓프로그래밍이라고도 할수있습니다.
소켓이란 입/출력을 하기위한 것으로 표준, 파일, 네트워크 입출력을 할수있습니다.
통신하려는 타입에 맞춰 소켓을 생성해서 사용합니다.
!socket family
- AF_INET/6 - ipv4로 통신 6으로하면 6으로 통신
- AF_PACKET - raw 소켓일때 패킷타입으로 사용
!type
- SOCK_STREAM - tcp통신
- SOCK_DGRAM - udp통신
- SOCK_RAW
파이썬 공식홈페이지에 socket 에 문서가 있습니다.
https://docs.python.org/3/search.html?q=socket&check_keywords=yes&area=default
네트워크 모델
- 1:1 (peer To peer 즉 p2p)
- 1:n(server client)
이번에는 UDP로 서버와 클라이언트 프로그래밍을 해보겠습니다.
UDP의 특징으로는 문자서비스를 비교해볼수있습니다. 송신을 하지만 수신확인이 불가능합니다.
1)서버 소켓 프로그래밍
- 클라이언트로부터 데이터를 전달 -> recv() , recvfrom()
- 해당 클라이언트한테 바로 되돌려줍니다 -> send(), sendto()
- UDP echo
간단한 UDP 통신을 확인해보겠습니다.
udp 서버를 간단히 만들어보겠습니다.
먼저 소켓을 생성하고 IP와 포트를 고정한후 recvfrom에 최대 수신가능 데이터 크기를 결정해주었습니다.
파이썬 옵션i를 사용하여 바로 사라지지않게하고 netstat 명령어로 UDP가 열려있는 포트를 확인해보았습니다.
이제 윈도우에서 nc tool를 사용하여 데이터를 전송해보겠습니다.
Tip - Netcat(nc)는 TCP/IP를 사용하는 네트워크 연결에서 read, write가 가능한 네트워크 유틸입니다.
데이터를 192.168.1.9로 전송하게 되면 리눅스에서는 파이썬 실행기 상태로 넘어가게 되는데 이때 data변수에 어떤 값이 있는지 확인해보면 아까 윈도우에서 보낸 데이터가 들어있는걸 확인할수있습니다!
여기서 recvfrom()를 사용한 이유는 UDP에서 recv()는 누구에게 데이터가 왔는지를 알수가없지만 recvfrom()를 사용하면 어디서 데이터가 왔는지를 확인할수있습니다.
UDP 에코서버를 만들어보겠습니다.
UDP타입의 소켓을 생성하고 bind로 주소를 고정시켜준후 recvfrom()함수를 사용했습니다.
파이썬에서는 일반문자열처리를 유니코드(UTF-8)를 사용합니다. 네트워크에서는 유니코드를 사용하지않기에 아스키코드(bytes, byterray)로 변형해서 보내주어야만 합니다. 형변환은 encode(), decode()를 하여 변형하는데 즉 str.encode() , bytes.decode() 와 같습니다.
UDP클라이언트를 간단히 만들어보겠습니다.
UDP클라이언트는 nc툴를 모델로 만들어보겠습니다.
while문부터 아래의 내용없이 더 간단히 만들어보면 sock.sendto(b'text'.(ip,port)) 와 data=sockfrom(30000)만 입력해도 테스트해볼수있습니다.
UDP통신을 확인해볼수있습니다.
'보안 > Network' 카테고리의 다른 글
Network APR(Address Resolution Protocol) (0) | 2018.03.21 |
---|---|
Network 각 계층별 헤더 파이썬모듈 정리 (0) | 2018.03.20 |
Network Scanning Program (0) | 2018.03.19 |
Network TCP 클라이언트/서버 프로그램 (0) | 2018.03.16 |
네트워크 실습환경구성 및 OSI 7 Layer (0) | 2018.03.13 |