글
[Wireshark] 필터링 방법 - Capture Filter
Tools/Wireshark
2010. 7. 31. 16:24
패킷을 캡쳐하는 툴인 Wireshark 에서 필수적으로 사용해야하는 필터링 방법에 대해서 알아보도록 하겠다.
먼저, 필터링을 하기 위해서는 좌측과 같이 Capture > Options 를 선택한다.
아래와 같이 Capture Filter 라는 란이 있는데 여기에 필터링 문법을 쓰면, 패킷 캡쳐를 시작하면서 필터링 규칙에 따라 캡쳐를 해서 보여준다.
그리고, 프로그램의 메인 화면을 보면, 캡쳐한 패킷 위에 존재하는 Filter 라는 란이 있다. 여기는 패킷 캡쳐 할 때, 필터링을 하는 것이 아니라 이미 캡쳐한 패킷에서 필터를 해서 원하는 항목만 걸러서 보여주는 것이다. 즉, 이미 캡쳐한 패킷에서 검색하는 기능이라 봐도 무난 할 것이다.
여기서의 문법은 패킷 캡쳐 당시의 필터링 문법과 다른데 Expression 을 누르면 다양한 문법을 선택해서 검색해 볼 수 있다.
먼저, 패킷 캡쳐 필터링 문법 부터 보도록 하겠다.
Syntax | Protocol | Direction | Host(s) | Value | Logical Operations | Other expression |
Example | tcp | dst | 128.11.33.4 | 80 | and | tcp dst ip port |
![](http://openmaniak.com/image/droite.gif)
사용 가능한 값: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp. 프로토콜을 지정하지 않으면 모든 프로토콜을 사용합니다.
![](http://openmaniak.com/image/droite.gif)
사용 가능한 값: src, dst, src and dst, src or dst
출발지나 목적지를 지정하지 않으면 "src or dst" 키워드가 사용됩니다.
예를 들어, "host 10.2.2.2"은 "src or dst host 10.2.2.2"과 동일합니다.
![](http://openmaniak.com/image/droite.gif)
사용 가능한 값: net, port, host, portrange.
호스트를 지정하지 않으면 "host" 키워드가 사용됩니다.
예를 들어, "src 10.1.1.1"은 "src host 10.1.1.1"과 같은 의미입니다.
![](http://openmaniak.com/image/droite.gif)
사용 가능한 값: not, and, or.
부정 연산("not")이 가장 높은 우선순위를 갖습니다. 논리합("or")과 논리곱("and")는 같은 우선순위를 가지며 왼쪽에서 오른쪽으로 처리됩니다.
예를 들어,
"not tcp port 3128 and tcp port 23"은 "(not tcp port 3128) and tcp port 23"과 동일하게 작용합니다.
"not tcp port 3128 and tcp port 23" 은 "not (tcp port 3128 and tcp port 23)"과는 동일하지 않습니다.
사용 예
: 목적지가 TCP 포트 3128인 패킷을 보여줍니다.
: 출발지 IP 주소가 10.1.1.1인 패킷을 보여줍니다.
: 출발지와 목적지 IP 주소가 10.1.1.1인 패킷을 보여줍니다.
: 출발지의 UDP, TCP 포트가 2000-2500 사이인 패킷을 보여줍니다.
: icmp 패킷을 제외한 모든 패킷을 보여줍니다. (icmp는 보통 ping 프로그램에서 사용합니다.)
: 출발지 IP 주소가 10.7.2.12이면서, 목적지 IP 네트워크가 10.200.0.0/16이 아닌 패킷을 보여줍니다.
출발지 IP 주소가 10.4.1.12이거나, 출발지 네트워크가 10.6.0.0/16인 패킷중에서 목적지 TCP 포트 범위가 200-10000이면서, 목적지 IP 네트워크가 10.0.0.0/8인 패킷을 보여줍니다.
tcp dst port 3128 |
ip src host 10.1.1.1 |
host 10.1.1.1 |
src portrange 2000-2500 |
not icmp |
src host 10.7.2.12 and not dst net 10.200.0.0/16 |
(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8 |
"\" 기호는 키워드 자체가 값을 나타낼 때 사용합니다.
"ether proto \ip"( \ip는 "ip"과 동일합니다.)
이것은 IP 프로토콜을 타켓으로 하게 됩니다.
"ip proto \icmp"(\icmp는 "icmp"과 동일합니다.)
이것은 일반적으로 ping 유틸리티에서 사용되는 icmp 패킷을 타켓으로 하게 됩니다.
"multicast"와 "broadcast" 키워드는 "ip" 나 "ether" 다음에 사용할 수 있습니다.
"no broadcast"는 broadcast 요청을 제외하고 싶을 때 유용하게 사용할 수 있습니다.
출처 : http://openmaniak.com/kr/wireshark_filters.php#display
'Tools > Wireshark' 카테고리의 다른 글
[Wireshark] 필터링 방법 - Display Filter (0) | 2010.07.31 |
---|
글
윈도우 7 정품 인증
Computer
2010. 7. 25. 16:21
파일 두개를 받아 압축을 푼다.
프로그램을 실행하면, 아래와 같이 압축을 풀게 된다.
그런 다음 아래와 같이 실행이 되며, 7을 누르고 엔터를 친다.
그리고 4를 누르고 엔터를 친다.
그리고 1을 누르고 엔터를 친다.
아래와 같이 7개의 항목을 다운 받으면서, 정품 인증을 받게 된다. :)
'Computer' 카테고리의 다른 글
VIA 랜카드 드라이버 다운로드 사이트 (0) | 2011.04.12 |
---|---|
[Window 7] Office 프로그램( 파워포인트, 엑셀 ) 여러 창에서 실행 (3) | 2010.09.27 |
컴퓨터 최적화 레지스트리 (0) | 2010.06.16 |
XP 서비스팩 3 다운 받는 곳 (0) | 2010.01.21 |
Microsoft Office Outlook을 시작할 수 없습니다. Outlook 창을 열 수 없습니다. (1) | 2009.12.02 |
글
[C++] 클래스 I
Programming/C++ Language
2010. 7. 21. 15:42
생성자
: 기본 생성자를 호출하지 않거나, 만들지 않더라도 묵시적으로 호출 및 생성이 되어서 호출이 된다. 물론, 생성자가 만들어지지 않았을 경우, 아무동작도 하지 않는다.
: 생성자는 오버로드 가능하여 클래스 객체를 초기화 하는 다양한 방법을 제공한다.
: 디폴트 생성자 - 클래스당 하나의 디폴트 생성자가 존재 할 수 있다. 라고 책에 되어 있다. 사실상 컴파일 상에서는 디폴트 생성자가 여러개 존재 할 수 있다.
그리고, CTimes time( 1, 2, 3 ); 을 호출하게 되면, ① 의 생성자가 호출 된다.
하지만, CTimes time( 1, 2 ); 을 호출하게 되면, "ambiguous call to overloaded function" 이라는 에러 문구를 보여준다. 애매한 호출을 한다는 것이다. time( 1, 2 ) 를 호출하면, ① 도 가능하고, ② 도 가능하다. 그러므로 컴파일러에서 혼돈을 하게 되는 것이다.
소멸자
: 생성자와 마찬가지로 명시적으로 만들지 않더라도, C++ 컴파일러에서 아무것도 하지 않는 디폴트 소멸자를 만들어준다.
: 소멸자는 오버로드가 불가능하다.
생성자, 소멸자 호출 순서
: 일반적으로 소멸자는 생성자가 호출되는 순서의 반대이다.
: 전역적으로 정의된 객체의 생성자는 main 함수를 비롯한 파일 내의 함수가 실행을 시작하기 전에 호출 된다. 그리고, 전역 객체의 생성자가 호출되는 순서는 보장되지 않는다.
: 전역 및 static 객체의 소멸자는 main 함수가 종료되거나, exit 함수가 호출될 때 호출된다.
: abort 함수를 호출하여 종료하게 되면, 전역 및 static 객체의 소멸자는 호출되지 않는다.
: static 지역 객체의 생성자는, main에서 해당 코드 부분이 수행될 때 호출이 되고,
Inline 함수
SetField 같은 경우에는 클래스 외부에서 정의된 멤버 함수 이므로 inline 키워드를 명시적으로 붙여 줘야 inline으로 호출을 하도록 요청 할 수 있다.
참고로, inline 으로 명시한다고 해서 항상 inline 으로 호출된다는 보장을 하지 않는다.
private 데이터 멤버에 참조반환
Class A
{
public:
int &Time::badSetHour( int h )
{
.....
위와 같이, private 변수를 참조반환을 하는 경우, hour 의 값을 반환하는 것이 아니라 hour 변수 자체 반환하는 것 처럼 되기 때문에, 외부에서 참조반환을 사용하여 private 변수를 직접 접근가능하게 되서, 객체지향에 위배되게 된다. 따라서 참조반환은 사용하지 않도록 하자.
위의 경우, a에서 10을 넣게 되면, time 객체의 private 변수인 hour 에 10이 들어가게 된다.
: 기본 생성자를 호출하지 않거나, 만들지 않더라도 묵시적으로 호출 및 생성이 되어서 호출이 된다. 물론, 생성자가 만들어지지 않았을 경우, 아무동작도 하지 않는다.
: 생성자는 오버로드 가능하여 클래스 객체를 초기화 하는 다양한 방법을 제공한다.
: 디폴트 생성자 - 클래스당 하나의 디폴트 생성자가 존재 할 수 있다. 라고 책에 되어 있다. 사실상 컴파일 상에서는 디폴트 생성자가 여러개 존재 할 수 있다.
class CTimes
{
public:
{
public:
~CTimes(void);
CTimes( int = 0, int = 0, int = 0 ); - ①
CTimes( int = 0, int = 0 ); - ②
CTimes( int = 0, int = 0, int = 0 ); - ①
CTimes( int = 0, int = 0 ); - ②
....
}
}
그리고, CTimes time( 1, 2, 3 ); 을 호출하게 되면, ① 의 생성자가 호출 된다.
하지만, CTimes time( 1, 2 ); 을 호출하게 되면, "ambiguous call to overloaded function" 이라는 에러 문구를 보여준다. 애매한 호출을 한다는 것이다. time( 1, 2 ) 를 호출하면, ① 도 가능하고, ② 도 가능하다. 그러므로 컴파일러에서 혼돈을 하게 되는 것이다.
소멸자
: 생성자와 마찬가지로 명시적으로 만들지 않더라도, C++ 컴파일러에서 아무것도 하지 않는 디폴트 소멸자를 만들어준다.
: 소멸자는 오버로드가 불가능하다.
생성자, 소멸자 호출 순서
: 일반적으로 소멸자는 생성자가 호출되는 순서의 반대이다.
: 전역적으로 정의된 객체의 생성자는 main 함수를 비롯한 파일 내의 함수가 실행을 시작하기 전에 호출 된다. 그리고, 전역 객체의 생성자가 호출되는 순서는 보장되지 않는다.
: 전역 및 static 객체의 소멸자는 main 함수가 종료되거나, exit 함수가 호출될 때 호출된다.
: abort 함수를 호출하여 종료하게 되면, 전역 및 static 객체의 소멸자는 호출되지 않는다.
: static 지역 객체의 생성자는, main에서 해당 코드 부분이 수행될 때 호출이 되고,
Inline 함수
Class A
{
위와 같이, 빨간색의 멤버함수가 클래스 몸체에 정의 되어 있으면, C++ 컴파일러는 그 멤버 함수를 인라인으로 호출하려 할 것이다.{
result GetResult() { return __r; }
result SetValue( int nVal ) { __val = nVal };
result SetField( String str );
result SetValue( int nVal ) { __val = nVal };
result SetField( String str );
}
inline result A::SetField( String str )
{
inline result A::SetField( String str )
{
__str = str;
}
SetField 같은 경우에는 클래스 외부에서 정의된 멤버 함수 이므로 inline 키워드를 명시적으로 붙여 줘야 inline으로 호출을 하도록 요청 할 수 있다.
참고로, inline 으로 명시한다고 해서 항상 inline 으로 호출된다는 보장을 하지 않는다.
private 데이터 멤버에 참조반환
Class A
{
public:
int &badSetHour(int );
private:
int hour;
}
int &Time::badSetHour( int h )
{
.....
return hour;
}
main()
{
int& a = time.GetHour();
a = 10;
}
main()
{
int& a = time.GetHour();
a = 10;
}
위와 같이, private 변수를 참조반환을 하는 경우, hour 의 값을 반환하는 것이 아니라 hour 변수 자체 반환하는 것 처럼 되기 때문에, 외부에서 참조반환을 사용하여 private 변수를 직접 접근가능하게 되서, 객체지향에 위배되게 된다. 따라서 참조반환은 사용하지 않도록 하자.
위의 경우, a에서 10을 넣게 되면, time 객체의 private 변수인 hour 에 10이 들어가게 된다.
'Programming > C++ Language' 카테고리의 다른 글
[C++] 참조 변수 (1) | 2010.07.31 |
---|---|
[C++] 참조 반환 (0) | 2010.07.31 |
[C++] C++상에서 발생하는 name mangling에 관한 내용 (0) | 2010.07.16 |
[C++] Errors : cannot allocate an object of abstract type '???' (0) | 2010.06.14 |
[C++] 복사 생성자 (0) | 2010.05.31 |