반응형

분류 전체보기 59

Wireshark(와이어샤크)로 TLS로 암호화된 패킷 복호화 하기

네트워크 트래픽을 모니터링하고 분석하는데 널리 사용되는 Wireshark는 TLS(Transport Layer Security)와 같은 암호화 프로토콜을 사용하여 보호된 패킷을 캡처할 수 있습니다. 하지만 TLS로 암호화된 패킷을 캡처했다고 해서 패킷의 내용을 쉽게 이해할 수는 없습니다. 이러한 암호화된 패킷을 복호화하여 내용을 확인하려면 Wireshark에서 몇 가지 추가 설정이 필요합니다. 다음은 TLS로 암호화된 패킷을 복호화하는 방법을 알아봅니다. TLS로 암호화된 패킷을 복호화 하기 1. C:\SSLKEYLOGFILE 폴더를 생성합니다.  2. 찾기에서 "시스템 환경 변수 편집" 으로 들어갑니다. 3. "환경 변수" -> 시스템 변수 "새로 만들기" 를 클릭합니다.4. 새 시스템 변수에 변수 이..

기타 2024.04.25

Wireshark(와이어샤크) 설치 방법

WireShark란 무엇인가요? WireShark는 네트워크 패킷 분석 도구로, 네트워크 트래픽을 캡처하고 분석하는 데 사용됩니다. 이 도구는 개발자, 시스템 관리자, 보안 전문가 및 네트워크 엔지니어들 사이에서 널리 사용되며, 다양한 용도로 활용됩니다. WireShark의 중요성 네트워크 문제 해결: 네트워크에서 발생하는 문제를 신속하게 진단하고 해결하는 데 도움이 됩니다. 패킷 레벨에서 트래픽을 분석하여 문제의 근본 원인을 찾을 수 있습니다. 보안 분석: 악의적인 트래픽을 감지하고 네트워크 보안 위협을 식별하는 데 사용됩니다. WireShark를 사용하여 네트워크에서 이상한 활동을 모니터링하고 보안 이벤트를 탐지할 수 있습니다. 프로토콜 분석: 다양한 네트워크 프로토콜을 지원하며, 프로토콜의 동작을 ..

기타 2024.04.21

냄새 14. 성의 없는 요소(Lazy Element)

성의 없는 요소(Lazy Element)는 프로그램에서 사용하지 않는 코드 또는 기능을 가리키는 코드 냄새 중 하나입니다. 이러한 코드는 작성 시 개발자가 과거 또는 현재의 개발자가 아닌 미래의 다른 개발자들을 위해 만드는 것이 좋습니다. 성의없는 요소는 코드의 복잡도를 증가시키고, 유지보수와 확장성을 어렵게 만듭니다. 또한 이러한 코드는 프로그램의 실행 속도를 늦출 수 있습니다. 성의없는 요소를 제거하는 방법 중 하나는, 불필요한 코드를 제거하고 단순하게 유지보수할 수 있는 코드로 수정하는 것입니다. 이러한 작업은 코드 리팩터링 과정에서 수행됩니다. 예를 들어, 사용하지 않는 변수나 함수를 제거하거나, 중복된 코드를 제거하거나, 불필요한 주석을 제거하는 등의 작업이 이에 해당합니다. 또 다른 방법으로는..

리팩터링 기법. 반복문을 파이프라인으로 바꾸기(Replace Loop with Pipeline)

반복문을 파이프라인으로 바꾸기(Replace Loop with Pipeline)는 컬렉션을 다루는 로직에서 특히 효과적인 기법입니다. 기존에는 반복문을 사용하여 컬렉션의 원소를 하나씩 처리했지만, 이를 파이프라인으로 변경하여 더욱 간결하고 가독성이 좋은 코드로 만드는 것입니다. 파이프라인은 입력 데이터를 처리하고 출력 데이터를 생성하는 여러 단계로 나누어져 있는 프로세스를 의미합니다. 각 단계는 이전 단계의 출력을 입력으로 받아 다음 단계의 출력을 생성합니다. 이러한 구조를 활용하여 컬렉션을 처리하는 코드를 구현할 수 있습니다. 예를 들어, 다음과 같은 반복문 코드가 있다고 가정해 봅시다. std::vector numbers = {1, 2, 3, 4, 5}; std::vector doubledNumber..

std::variant

std::variant는 C++17에서 추가된 표준 라이브러리 클래스로, 여러 타입 중 하나를 저장할 수 있는 유연한 클래스입니다. 이전에는 유사한 기능을 하는 std::any를 사용해왔으나, std::variant는 더욱 타입 안전하고 간결하게 사용할 수 있습니다. std::variant는 일반적으로 union과 비슷한 방식으로 작동합니다. 즉, 저장된 값은 선택한 타입의 크기와 정렬 요구 사항을 따릅니다. std::variant는 다음과 같은 특징을 갖습니다. - 여러 타입 중 하나를 저장할 수 있는 유연한 클래스 - 저장된 값은 선택한 타입의 크기와 정렬 요구 사항을 따름 - 선언할 때 모든 가능한 타입을 정의해야 하며, 선언 후에는 해당 타입들 중 하나의 값만 저장할 수 있음 - switch문과 ..

C++ 2023.04.06

냄새 13. 반복문(Loops)

반복문(Loops)을 사용하는 것이 코드 작성의 효율성을 높일 수 있지만, 반복문이 중첩되거나 복잡한 조건문과 함께 사용되는 경우 코드의 복잡성이 증가하고 코드를 이해하기 어려워질 수 있습니다. 반복문의 문제점 중 하나는 다른 로직과 함께 사용되는 경우 유지보수성이 낮아질 수 있다는 것입니다. 예를 들어, 아래의 코드에서 반복문은 사이즈를 계산하고, 각 색상의 평균값을 계산하는 두 가지 다른 로직과 함께 사용됩니다. int size = 0; double redSum = 0.0; double greenSum = 0.0; double blueSum = 0.0; for (int i = 0; i < pixels.size(); ++i) { size++; redSum += pixels[i].red(); greenS..

냄새 12. 반복되는 switch문(Repeated Switches)

반복되는 switch문(Repeated Switches)은 여러 개의 switch 문이 동일한 조건식을 검사하는 경우를 말합니다. 예를 들어, 다음과 같은 코드를 생각해보겠습니다. void processAnimalSound(Animal* animal) { switch (animal->getType()) { case AnimalType::CAT: // process cat sound break; case AnimalType::DOG: // process dog sound break; case AnimalType::COW: // process cow sound break; default: // process default sound break; } } void processAnimalMovement(Anim..

리팩터링 기법. 조건부 로직을 다형성으로 바꾸기(Replace Conditional with Polymorphism)

조건부 로직을 다형성으로 바꾸기(Replace Conditional with Polymorphism)란 객체의 타입에 따라 분기되는 조건부 로직을 상속 구조를 이용하여 다형성을 적용하여 코드를 간결하고 유연하게 만드는 리팩터링 방법입니다. 조건부 로직은 보통 if-else문, switch-case문 등으로 구현되며, 객체의 타입에 따라 다른 로직을 수행하도록 설계되어 있습니다. 이러한 코드는 코드의 유지보수성이 나쁘며, 새로운 객체 타입이 추가될 때마다 코드의 수정이 필요합니다. 따라서 이러한 조건부 로직을 다형성을 이용하여 분리하고, 객체의 타입에 따라 해당하는 메서드를 호출하는 방식으로 코드를 변경하는 것이 좋습니다. 이 방법을 사용하면, 객체의 타입에 따라 다른 동작을 수행해야 할 때 새로운 객체 ..

리팩터링 기법. 타입 코드를 서브클래스로 바꾸기(Replace Type Code with Subclasses)

타입 코드(Type Code)란, 하나의 클래스 안에서 여러 종류의 객체를 표현하기 위해 사용하는 코드를 말합니다. 이는 예를 들어, 도형 클래스 안에서 도형의 종류를 표시하기 위한 숫자나 문자열과 같은 것을 말할 수 있습니다. 타입 코드를 서브클래스로 바꾸기(Replace Type Code with Subclasses)는 이러한 타입 코드를 사용하는 것을 서브클래스로 분리하는 방법입니다. 타입 코드에 따라 객체의 특성이 달라지는 것을 서브클래스로 만들어 표현함으로써, 객체지향적인 설계를 더욱 강화할 수 있습니다. 서브클래스로 분리하는 방법은, 기존 클래스의 타입 코드에 해당하는 각 서브클래스를 만든 다음, 기존 클래스에서 해당 타입 코드를 제거하고 대신 적절한 서브클래스의 인스턴스를 생성하여 반환하도록..

리팩터링 기법. 기본형을 객체로 바꾸기(Replace Primitive with Object)

기본형을 객체로 바꾸기(Replace Primitive with Object)는 기본형 변수를 사용하는 대신 새로운 클래스를 정의하고 그 클래스의 인스턴스를 사용하는 방식으로 코드를 개선하는 리팩터링 기법입니다. 기본형 변수는 더 큰 데이터 구조와 연결되어 있지 않기 때문에 코드의 가독성과 유지보수성을 저해할 수 있습니다. 반면, 객체는 속성과 행동을 갖는 더 복잡한 데이터 구조를 나타낼 수 있습니다. 예를 들어, 기본형 변수로 통화를 나타내는 경우, 환율이나 기타 통화와 관련된 정보를 캡슐화하고, 통화 간의 변환을 수행할 수 있는 새로운 클래스를 정의할 수 있습니다. 또 다른 예로, 기본형 변수로 날짜를 나타내는 경우, 시간대, 일괄처리 및 기타 관련 정보를 캡슐화하고, 날짜 간의 비교, 연산 및 계산..

반응형