네트워크 보안/네트워크

    strongswan #2 starter -> charon launch, config update

    StrongSwan starter는 Charon 프로세스를 실행하고 구성 파일을 읽어 IKE/IPsec 연결 메세지를 charon 데몬으로 전달하는 역할을 한다. starter: strongswan/src/starter/바이너리 위치: /usr/libexec/ipsec/startercharon: strongswan/src/charon/  Starter 실행 후 초기화 과정Usage: starter [--nofork] [--auto-update ] [--debug|--debug-more|--debug-all|--nolog] [--attach-gdb] [--daemon ] [--conf ] 1. library_init()starter..

    Netlink Sockets # How to use

    Netlink는 Linux에서 kernel space와 user space 간의 통신을 위해 설계된 특별한 IPC (Inter-Process Communication)입니다. Netlink를 사용하면 커널과 사용자 간 데이터를 주고받을 수 있으며, socket programming 방식을 사용하기 때문에 기존의 소켓 프로그래밍과 유사하게 사용할 수 있습니다. Netlink는 아래와 같은 특징과 장점이 있습니다. Netlink의 장점 구현이 간단함 Netlink는 kernel과 user space 사이의 통신을 구현할 때, 기존의 system calls, ioctl, proc file system 등을 사용하지 않고도 쉽게 구현할 수 있습니다. Netlink를 사용하면 추가하고자 하는 API와 protoc..

    strongswan #1 IKEv2 소프트웨어 아키텍쳐, 메세지 포맷, config 설정 및 실행 방법

    strongswan #1 IKEv2 소프트웨어 아키텍쳐, 메세지 포맷, config 설정 및 실행 방법

    strongSwan은 IPsec(Internet Protocol Security) 기반 VPN 솔루션으로, 주로 IKE(Internet Key Exchange) 프로토콜을 통해 보안 연결을 설정하고 관리한다.핵심 구성요소는 charon이고 그 외 launcher 역할을 하는 starter, 라이브러리인 libcharon, libstrongswan이 있다.소스코드를 확인하면 아래와 같이 많은 모듈이 나온다. 하지만 크게 봐야할 부분은 다음과 같다.libstrongswan: strongSwan의 핵심 라이브러리(암호화, 키 교환, 인증 및 다양한 프로토콜을 지원)libcharon: IKE 데몬인 charon에서 사용하는 라이브러리( IKEv2 프로토콜 기반 VPN 커넥션 관리, 네트워크 키 교환 처리)plu..

    TCP/IP Stack 개발 #1 Ethernet & ARP

    TCP/IP Stack 개발 #1 Ethernet & ARP

    TCP/IP stack을 개발하는 것은 어려운 작업일 수 있으나 핵심사양은 비교적 간결하다.중요한 부분은 TCP header 파싱, 상태 머신, 혼잡 제어, 재전송 시간 초과 계산이다. 가장 일반적인 Layer2와 Layer3 프로토콜인 Ethernet과 IP는 각각 TCP의 복잡성에 비하면 간단하다.  TUN/TAP 장치리눅스 TAP 장치를 이용하여 리눅스 커널에서 저수준 네트워크 트래픽을 가로챌 수 있다. TUN/TAP 장치는 일반적으로 User Space application이 각각 L3/L2 트래픽을 조작하는데 사용된다. 인기있는 예로는 패킷을 다른 패킷의 페이로드 내부에 래핑하는 터널링이 있다.  TUN/TAP 장치의 장점은 User Space 프로그램에서 설정이 쉽고 OpenVPN 과 같은 다..

    [C/C++] epoll

    Epollepoll은 select의 단점을 보완하여 사용할 수 있도록 만든 I/O 통지 모델이다. 파일 디스크립터를 사용자가 아닌 커널이 관리하며 그만큼 cpu 는 계속해서 파일 디스크립터의 상태 변화를 감시할 필요가 있다. 즉 select 처럼 어느 파일 디스크립터에 이벤트가 발생하였는지 찾기 위해 전체 파일디스크립터에 대해서 순차 검색을 위한 FD_ISSET 루프를 돌려야 하지만 Epoll의 경우 이벤트가 발생한 파일 디스크립터들만 구조체 배열을 통해 넘겨주므로 메모리 카피에 대한 비용이 줄어든다. Epoll의 주요기능- non block I/O 지: epoll은 non block 모드로 파일 디스크립터를 처리할 수 있다.- 높은 성능: 파일 디스크립터 집합을 다룰 때 매우 효율적이다.- Edge T..

    Scalable Network Programming

    네트워크 프로그래밍에서 Scalable 하게 만드는 것은 중요한 주제이다. 네트워크 서버는 동시에 여러 클라이언트 요청을 처리할 수 있어야 하며, 이는 서버의 확장성과 성능에 영향을 준다. 아래 코드는 간단한 서버-클라이언트 구조의 프로그램이다. 1. TCP 소켓을 사용하여 HTTP GET 요청을 보내는 간단한 클라이언트 코드 Error handling 없이 구현 HTTP 헤더를 포함하여 최대 4k까지만 가져올 수 있음. char buf[4096]; int len; int fd=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); struct sockaddr_in si; si.sin_family=PF_INET; inet_aton("127.0.0.1",&si.sin_addr); si.s..

    [Python/ MQTT] MQTT – Pub/Sub 모델 구현

    [Python/ MQTT] MQTT – Pub/Sub 모델 구현

    MQTT란 MQTT는 M2M, IOT를 위한 프로토콜로서 최소한의 전력과 패킷량으로 통신하는 프로토콜MQTT는 HTTP, TCP 등의 통신과 같이 클라이언트-서버 구조로 이루어진 것이 아닌 Broker, Publisher, Subscriber 구조로 이루어져있다. MQTT 특징ClientMQTT의 broker에 연결된 모든 것을 말한다.BrokerBroker는 모든 메세지를 수신, 필터링, 메세지 구독하는 사람을 결정, 클라이언트에게 메세지를 보내는 역할Subscribetopic을 구독하여 topic으로 publish된 메세지를 받는다.TopicMQTT의 topic은 슬래시(/)를 분리 문자로 사용하여 폴더 및 파일과 유사한 계층 구조를 가진다. ex) /api/update/승주/비밀번호QoS(Quali..

    [Django] Jump to Django (02/admin)

    [Django] Jump to Django (02/admin)

    Super User 장고 admin을 사용하기 위해서는 장고 admin 화면에 접속할 수 있는 슈퍼유저를 먼저 생성해야 한다. ~/baby-django$ python manage.py createsuperuser 사용자 이름 (leave blank to use 'runner'): admin 이메일 주소: admin@mysite.com Password: Password (again): Superuser created successfully. 그런 다음 /admin에서 생성한 id pw로 로그인하면 관리자 화면에 접근할 수 있게 된다. Model 관리 from django.contrib import admin from .models import Question admin.site.register(Questi..

    [Django] Jump to Django (01/앱 생성+DB 생성)

    [Django] Jump to Django (01/앱 생성+DB 생성)

    App 생성 앞에서 만든 mysite 프로젝트에서 기능을 추가하기 위해서는 앱을 생성해야한다. 게시판 기능을 담당할 앱을 생성하자. django-admin의 startapp 명령어로 app을 생성 할 수 있다. django-admin startapp 명령을 실행하면 pybo 디렉토리가 생성된걸 확인할 수 있다. 하지만 /pybo 페이지를 요청했을 때는 404 에러가 발생한다. 오류의 내용은 config.urls에 매핑이 없다고 적혀 있다. Hello Pybo config/urls.py 파일을 다음과 같이 수정하자. from django.contrib import admin from django.urls import path from pybo import views urlpatterns = [ path('..