분류 전체보기 (698) 썸네일형 리스트형 날짜 관련 명령어 [1. 개요] 윈도우 서버에서 매 시간(혹은 매 분...) 단위로 어떤 작업을 진행하고 작업 로그 등을 현재 날짜에 해당하는 디렉터리에 저장하고, 그 다음날 해당 디렉터리에서 결과물을 백업, 삭제 또는 통계 자료 등을 취합해야하는 경우 배치 파일로 작업 스크립트를 작성하고 작업 스케줄러에 등록해놓는 경우가 많다. 이 경우 배치 파일에서는 현재 날짜(보통 다음날 00:30 정도?) 에 이전 날짜를 알 필요가 있으며, 해당 값을 변수에 저장해서 이후 활용한다. 이 글에서는 윈도우 서버에서 이전 날짜를 원하는 포맷팅으로 구하는 방법을 정리한다. [2. date 명령어] => date /t 를 통해 현재 날짜를 YYYY-mm-dd 형태로 얻을 수 있다. 단, 이전 날짜 같은 날짜 조작은 변경이 불가능하다. [3.. pkg-config 설치 [1. 개요] pkg-config 는 소스 코드를 컴파일할 목적으로 설치된 라이브러리를 조회하기 위해 통일된 인터페이스를 제공한다. 원래는 리눅스 용으로 설계되었으나 현재는 다양한 플랫폼에서 사용가능하다. 설치된 라이브러리에 대해 include 디렉터리 경로 lib 디렉터리 경로 패키지 버전 등을 관리 할 수 있다. [2. pc 파일] pkg-config 는 PKG_CONFIG_PATH 라는 환경변수에 저장된 경로를 기준으로 필요한 라이브러리에 대한 .pc 파일을 찾는다. pc 파일은 pkg config 의 약자로 볼 수 있으며, 해당 파일은 아래와 같은 형식을 갖는다. [3. Windows 에서 설치] pkg-config 는 실행 파일과 2가지 dll 파일을 필요로 한다. 먼저 실행 파일은 아래 링크에.. cgo [1. 개요] cgo 는 C code 를 호출하는 go package 의 생성을 가능하게 한다. 일반적으로 cgo 를 사용하기 위해 go 소스코드를 작성하는 방법은 pseudo 패키지 "C" 를 import 하는 것이다. => import "C" CFLAGS, CPPFLAGS, CXXFLAGS, FFLAGS, LDFLAGS 등이 #cgo directive 내에 정의 될 수 있다. pkg-config 로 관리 할 수도 있다. gcc 가 사전에 PC 에 설치되어 있어야 한다. go env 시 CC 와 CXX 가 각각 gcc 와 g++ 로 설정되어 있다. [2. 예제] 위와 같이 go 소스코드에서 주석에 C 코드를 작성한다. 그리고 유의사항이 한가지 있는데, C 코드를 감싸는 주석과 import "C" 는 반.. GoogleTest 개요 및 설치 [1. 개요] 구글에서 만든 C++ Unit Test Framework 테스트는 독립적이고 반복할 수 있도록 한다. 관련된 테스트를 TestSuite 로 그룹화하여 데이터와 Subroutine 을 공유할 수 있도록 한다. 플랫폼에 종속되지 않다. => 윈도우 / 리눅스 / 맥에서 모두 지원 됨 테스트 실패 시 왜 실패했는지 알려준다. => File / Line / Call Stack? 테스트 자체에 집중 할 수 있도록 해준다. 공유 자원을 테스트 간에 재사용 할 수 있고, 한번 만 실행되는 SetUp / TearDown 와 같은 함수를 사용 할 수 있다. [2. 설치 (윈도우)] 소스코드 다운로드 컴파일 => 소스코드 압축 해제 (가급적 배포버전을 기준으로) https://github.com/google.. pcap_dispatch 와 기타 함수 들 [1. 함수 원형] [2. 함수 설명] pcap_dispatch() cnt 만큼 명시한 패킷만큼 만 callback 함수를 통해 처리 한 후 종료 한다. 여기서 cnt 는 최소가 아닌 최대 개수를 의미하는데, pcap_open_live() 로 pcap descriptor 오픈 시 버퍼 만큼의 패킷을 받은 경우 1개의 패킷만 처리될 수 있기 때문이다. -1 을 명시한 경우는 해당 버퍼로 받을 수 있는 모든 패킷을 의미한다. user 로 명시 된 포인터는 콜백함수로 그대로 전달 되므로, 이를 함수 간 통신 매개체로 사용 할 수 있어 보인다. return 값에 대한 의미는 보통 읽은 개수의 패킷이나 아래와 같은 예외 상황이 있다. 0: 패킷이 필터링 되거나, read timeout 등으로 인해 패킷을 읽지 못.. pcap_open_live 함수 [1. 원형] pcap_t* pcap_open_live(const char* device, int snaplen, int promisc, int to_ms, char *ebuf) void pcap_close(pcap_t *p) pcap_t* pcap_loop(pcap_t* p, int cnt, pcap_handler callback, u_char* user) void(* pcap_handler)(u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data) [2. 설명] pcap_open_live() 네트워크 상 패킷을 캡쳐하기 위한 descriptor 를 개방할 때 사용 됨. device: 패킷을 캡쳐할 네트워크 디바이스 이름 리.. pcap_lookupnet 함수 [1. 원형] int pcap_lookupnet(const char * device, bpf_u_int32 * netp, bpf_u_int32 * maskp, char * errbuf) [2. 설명] 선택한 device 의 해당하는 interface 의 subnet 과 netmask 를 반환한다. 실패 시 -1 을 반환하고, errbuf 를 통해 에러 메세지를 반환한다. [3. 예제] [4. 의문?] 윈도우의 경우 subnet 과 netmaks 출력이 이상한데, 주로 0.0.0.0 으로 출력 됨. pcap_if_t 구조체 내부에는 pcap_addr 이라는 구조체가 존재하는데, pcap_addr 은 연결 리스트 형태임. 리눅스의 경우 pcap_addr 연결 리스트의 길이가 1 이라서 상관 없지만 윈도우의 .. pcap_findalldevs 함수 [1. 원형] int pcap_findalldevs(pcap_if_t ** alldevsp, char* errbuf) [2. 설명] pcap_open_live() 함수로 개방 될 수 있는 네트워크 디바이스 목록을 생성 함 권한이 없는 경우 모든 장치를 확인 할 수 없을 수 있다. 실패 시 -1 을 반환하고, errbuf 에 적절한 에러 메시지가 설정되며, 성공 시 0 을 반환함. [3. winpcap] int pcap_findalldevs_ex(char* source, pcap_rmtauth* auth, pcap_if_t ** alldevs, char* errbuf) 기존 pcap_findalldevs() 가 로컬 머신에 있는 네트워크 장치에 대해서만 확인 할 수 있었다면, pcap_findalldevs.. pcap 개발 환경 설정 [1. Windows] https://www.winpcap.org/install/ => windows api 를 이용하여 자체 구현한(?) 네트워크 디바이스 드라이버를 통해 패킷을 확인하는듯 함. installer 실행 https://www.winpcap.org/install/bin/WpdPack_4_1_2.zip 압축 해제 후 include 및 library 경로를 개발 툴에 import [2. Linux(Ubuntu)] $ sudo install libpcap-dev => raw socket 을 통해 패킷을 확인 할 수 있음. include 경로는 보통 /usr/include lib 경로는 보통 /usr/x86_64-linux-gnu 에서 찾을 수 있음 [3. 개발 환경] C 또는 C++ 프로젝트의 .. CMake command 정리 cmake_minimum_required => 프로젝트에 대한 cmake 의 최소 버전을 명시 => ex) cmake_minimum_required(VERSION 3.1) project => 프로젝트의 이름을 설정 => 버전 관리도 할 수 있음 => 하지만, 프로그램 언어 정도만 기술하는게 편해보임 => ex) project(myproject C CXX) => CXX == C++ set => 사용 할 값에 대한 변수명을 명시 => set(변수명 값) => ex) set(CMAKE_BUILD_TYPE Release) message => 콘솔 화면에 로그를 기록 => message(Mode messages...) => mode 는 주로 STATUS, FATAL_ERROR, DEBUG, TRACE 사용해도 충.. 이전 1 ··· 42 43 44 45 46 47 48 ··· 70 다음