HANDLE hMutex = CreateMutex(NULL, FALSE, NULL);
ASSERT(hMutex);
WaitForSingleObject(hMutex, INFINITE);
// 리소스 사용
ReleaseMutex(hMutex);
Posted on 2011. 8. 19. 18:04
Filed Under Programming/Network
Posted on 2009. 5. 12. 13:29
Filed Under Programming/Network
Ping(Packet Internet Groper)
- 대상 IP와의 연결상태 확인
- 정보: 대상의 응답 여부, 응답을 받는데 걸리는 시간(delay), 패킷 유실율
- delay : ICMP echo request packet 을 전달한 시간과 해당 Seq No.를 가진 ICMP echo reply packet을 전달받은 시간차이로 계산
Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
[-r count] [-s count] [[-j host-list] | [-k host-list]]
[-w timeout] destination-list
Options:
-t 지정된 컴퓨터에서 종료될 때까지 ping을 전달한다.
To see statistics and continue - type Control-Break;
To stop - type Control-C.
-a 주소를 컴퓨터 이름으로 변경한다.
-n count count에 지정된 ECHO 패킷의 수를 보낸다.
-l length length에 지정된 크기의 데이터로 ECHO 패킷을 보낸다. (기본값: 32bytes, 최대: 65,527 bytes)
-f 패킷에 Do not Fragment 플래그를 보낸다.
이 패킷은 도중에 게이트웨이에 의해 조각으로 나누어지지 않는다.
-i TTL Time To Live 필드를 ttl에 지정된 값으로 설정한다.
-v TOS Type of Service 필드를 tos에 저징된 값으로 설정한다.
-r count 보내는 패킷과 반환된 패킷의 경로를 Record Route 필드에 기록한다. (1 <= count <= 9)
-s count count에 지정된 홉의 수에 대한 time stamp를 지정한다.
-j host-list host-list에 지정된 컴퓨터의 목록을 통해 패킷의 경로를 정한다.
연속적인 컴퓨터는 중간 게이트웨이로 구분할 수 있다. IP가 허용하는 최대 수는 9이다.
-k host-list host-list에 지정된 컴퓨터의 목록을 통해 패킷의 경로를 정한다.
연속적인 컴퓨터는 중간 게이트웨이로 구분할 수 없다. IP가 허용하는 최대 수는 9이다.
-w timeout 시간 초과 간격을 초단위로 지정한다.
ARP (Address Resolution Protocol)
- 로컬에서 분해된 IP주소에 대한 물리적인 주소의 캐시 내용을 보여주고 수정할 수 있다.
- Ethernet/IP주소의 변환에 관한 정보를 제공
- 용도: 로컬 네트워크 내에 IP주소가 잘못 지정되었는지를 확인
ARP -s inet_addr eth_addr [if_addr]
ARP -d inet_addr [if_addr]
ARP -a [inet_addr] [-N if_addr]
-a TCP/IP를 쿼리하여 현재ARP 항목을 표시한다.
inet_addr를 지정하면 지정된 컴퓨터의 IP와 물리적 주소만 표시된다.
-g Same as -a.
inet_addr 192.168.2.154 와 같은 IP주소
-N if_addr if_addr에 의해 지정된 네트워크 인터페이스의 ARP 항목올 표시한다.
ip_addr가 있으면 주소 변환 테이블을 수정해야 하는 인터페이스의 IP 주소를 지정한다.
ip_addr가 없으면 처음 적용할 수 있는 인터페이스를 사용한다.
-d inet_addr에 의해 지정된 항목을 삭제한다. 와일드카드(*) 사용가능
-s IP 주소 inet_addr가 물리적 주소 ether_addr와 연관되도록 ARP 캐시에 항목을 추가한다.
eth_addr 물리적 주소. 하이픈(-)으로 구분된 6개의 16진수 바이트로 표시된다.
if_addr If present, this specifies the Internet address of the
interface whose address translation table should be modified.
If not present, the first applicable interface will be used.
Example:
> arp -s 157.55.85.212 00-aa-00-62-c6-09 .... Adds a static entry.
> arp -a .... Displays the arp table.
ipconfig
- TCP/IP 네트워크 구성값을 표시
- DHCP를 실행하는 시스템에서는 사용자가 DHCP에 의해 주성된 TCP/IP 구성값을 결정할 수 있게 한다.
A. 구성조회
ipconfig [/all | /renew [adapter] | /release [adapter]]
/all 전체 정보를 표시한다.
기본 정보는 각 네트워크 카드의 IP 주소, 서브넷 마스크 및 기본 게이트웨이 값만 표시
/renew [adapter] DHCP 구성 매개 변수를 새로 만든다.
이 옵션은 DHCP 클라이언트 서비스를 실행하는 시스템에서만 사용가능.
어댑터 이름을 지정하려면 매개 변수 없이 ipconfig를 사용할 때 나타나는 어댑터 이름을 입력해야한다.
/release [adapter] 현재 DHCP 구성을 해제한다.
이 옵션은 로컬 시스템에서 TCP/IP를 사용할 수 없게 하며 DHCP 클라이언트에서만 사용할 수 있다.
어댑터 이름을 지정하려면 매개 변수 없이 ipconfig를 사용할 때 나타나는 어댑터 이름을 입력해야한다.
B. DNS 클라이언트 등록 갱신
- ipconfig /registerdns [adapter]
adapter : 등록을 갱신할 컴퓨터에 설치된 특정 네트워크 어댑터
- DNS 클라이언트 등록 갱신: 구성되어 있는 DNS 이름과 IP 주소의 동적 등록을 수동으로 시작할 수 있다.
- 디폴트로 ipconfig /registerdns 명령은 모든 DHCP 주소 임대를 새로 고치고 클라이언트 컴퓨터에서 구성하고 사용하는 관련된 모든 DNS 이름을 등록한다.
- 이 명령으로 선택적으로 지정할 수 있는 어댑터 이름을 보려면 ipconfig 명령만 입력한다.
- 실패한 DNS 이름 등록의 문제를 해결하거나 클라이언트를 다시 부팅하지 않고 클라이언트와 DNS 서버간 동적 업데이트 문제를 해결하는데 유용하다.
C. 클라이언트 확인자 캐시 표시
- ipconfig /displaydns
- 이 캐시에는 로컬 호스트 파일에서 미리 로드된 항목분 아니라 최근 시스템이 확인한 이름 쿼리에서 얻은 리소스 레코드가 포함된다.
- DNS 클라이언트 서비스는 구성되어 있는 DNS 서버에 쿼리하기 전에 이 정보를 사용하여 자주 쿼리되는 이름을 확인한다.
- ipconfig /displaydns 을 실행하면 결과에 로컬 호스트 루프백 IP 주소(127.0.0.1) 매핑이 포함된다. 이것은 로컬 호스트 파일에 수정되지 않은 기본 내용에 매핑이 있기 때문이다.
D. 클라이언트 확인자 캐시 플러시 및 재설정
- icponfig /flushdns
- DNS 클라이언트 확인자 캐시 내용을 플러시하고 재설정할 수 있다.
- 필요시 DNS 문제 해결 중에 이 단계를 사용하여 캐시에 보관된 부정 캐시 항목뿐 아니라 동적으로 추가된 다른 항목을 제거할 수 있다.
netstat
- 프로토콜 통계와 현재 TCP/IP 네트워크 연결을 표시
NETSTAT [-a] [-b] [-e] [-n] [-o] [-p protocol] [-r] [-s] [-v] [interval]
-a 모든 연결 및 수신 대기 포트를 표시합니다.
일반적으로 서버 연결은 나타나지 않는다.
-b 각 연결 또는 수신 대기 포트를 만드는 데 관련된 실행 프로그램을
표시합니다. 잘 알려진 실행 프로그램에서 여러 독립 구성 요소를
호스팅하는 경우에는 연결 또는 수신 대기 포트를 만드는 데
관련된 구성 요소의 시퀀스가 표시됩니다. 이런 경우에는
실행 프로그램 이름이 아래쪽 대괄호 안에 표시되어 있고 위에는
TCP/IP에 도달할 때까지 호출된 구성 요소가 표시되어 있습니다.
이 옵션은 시간이 오래 걸릴 수 있으며 사용 권한이 없으면 실패합니다.
-e 이더넷 통계를 표시합니다. 이 옵션은 -s 옵션과 같이 사용될수 있습니다.
-n 이름 검색을 시도하지 않고 주소 및 포트 번호를 숫자 형식으로 표시합니다.
-o 각 연결의 소유자 프로세스 ID를 표시합니다.
-p protocol 지정한 프로토콜에 해당되는 연결을 표시한다. 프로토콜은
TCP, UDP, TCPv6 또는 UDPv6 을 사용할 수 있다.
-s 옵션과 함께 사용하여 프로토콜별 통계를 표시할 경우 프로토콜은 IP, IPv6,
ICMP, ICMPv6, TCP, TCPv6, UDP 또는 UDPv6 가 될 수 있다.
-r 라우팅 테이블을 표시합니다.
-s 프로토콜별로 통계를 표시합니다. 기본값으로 IP, IPv6, ICMP,
ICMPv6, TCP, TCPv6, UDP 및 UDPv6에 관한 통계를 표시합니다.
-p 옵션을 함께 사용하면 기본값의 일부 집합에 대한 통계만
표시할 수 있습니다.
-v -b 옵션과 함께 사용하면 모든 실행 프로그램에 대한 연결
또는 수신 대기 포트를 만드는 데 관련된 구성 요소의 시퀀스를
표시합니다.
interval 다음 화면으로 이동하기 전에 지정한 시간 동안 선택한 통계를
다시 표시합니다. 통계 표시를 중단하려면 CTRL+C를 누르십시오.
지정하지 않으면 현재 구성 정보를 한 번 표시합니다.
route
- 한 네트워크 Hosts 또는 device까지의 경로를 추적하여 특정 주소까지의 네트워크 경로를 보여준다.
- 패킷이 루트를 찾는데 걸리는 시간을 확인하는 반응시간을 milisecond 단위로 보여주는데 이 반응시간은 네트워크 로드에 따라 다른 값을 나타나게 한다.
- ping을 실행했을 때와 같이 패킷이 전달되는 라우팅 지점들을 홉수별로 텍스트로 나타낸다.
- 네트워크 라우팅 테이블을 확인하거나 변경할 수 있다.
- 원격 호스트까지 패킷이 전행되는 동안의 라우팅 홉(hop) 정보를 보여준다.
ROUTE [-f] [-p] [command [destination]
[MASK subnetmask] [gateway] [METRIC metric] [IF interface]
-f 모든 게이트웨이 항목의 라우팅 테이블을 삭제한다.
-p add 명령과 함께 사용하면 시스템이 부팅할 때 경로를 보존하도록 만든다.
기본적으로 시스템을 다시 시작하면 경로가 보존되지 않는다.
print 명령과 함께 사용하면 등록된 보존 경로의 목록을 표시한다.
(Windows 95 에서는 지원안됨)
command 다음중 하나 지정
PRINT : 경로 인쇄
ADD : 경로 추가
DELETE : 경로 삭제
CHANGE : 기존 경로 수정
destination 명령을 보낼 호스트를 지정한다.
MASK subnetmask 경로 항목과 연결된 서브넷 마스크를 지정한다.
지정하지 않으면 255.255.255.255가 사용된다.
gateway 게이트웨이를 지정한다.
distination이나 gateway에 사용되는 모든 기호 이름은 Networks라는 네트워크 데이터베이스 파일과 Hosts라는 컴퓨터 데이터베이스 파일에서 모두 참조된다.
interface 특정 라우터의 인터페이스 번호
METRIC 가장 빠르고 신뢰할 수 있으며 비용이 가장 적게 드는 경로를 계산하는데 사용되는 정수 코스트 메트릭(1~9999)을 지정한다.
Examples:
> route PRINT
> route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 METRIC 3 IF 2
destination^ ^mask ^gateway metric^ ^
Interface^
If IF is not given, it tries to find the best interface for a given
gateway.
> route PRINT
> route PRINT 157* .... Only prints those matching 157*
> route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2
CHANGE is used to modify gateway and/or metric only.
> route PRINT
> route DELETE 157.0.0.0
> route PRINT
tracert
- 연결문제 발생시 연결하고자 하느 대상 IP 주소를 확인하고 결과를 기록할 수 있다.
- 컴퓨터에서 대상으로 패킷을 전달하는데 사용되는 일련의 IP 라우터와 각 홉에 걸리는 시간이 표시
- 대상까지 미도달시 패킷을 성공적으로 전달한 마지막 라우터가 표시
- 대상에 대한 다양한 TTL(Time-To-Live) 값으로 ICMP(Internet Control Message Protocol) 에코 패킷을 보내 대상으로 가는 경로를 결정한다. 경로 상의 각 라우터에서 패킷을 전달하기 전에 최소한 패킷의 TTL을 1만큼 줄여야 홉 수 계산에 TTL이 효과를 낼 수 있다. 패킷의 TTL이 0에 도달하면 라우터에서 ICMP 시간 초과 메시지를 원본 시스템으로 돌려보낸다고 가정한다.
- tracert 는 대상이 응답하거나 최대 TTL에 도달할 때까지의 1의 TTL을 가진 첫째 에코 패킷을 보내고 이어지는 각 전송에서 TTL을 1씩 증가시켜 경로를 결정한다. 경로는 중간 라우터들에서 반송한 ICMP 시간 초과 메시지를 검사하여 결정된다. 일부 라우터는 TTL 값이 만료된 패킷을 제거하기 때문에 tracert에서 볼 수 없는 경우도 있다.
Usage: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name
Options:
-d 주소를 컴퓨터 이름으로 풀지 않도록 지정한다.
-h maximum_hops 대상을 검색할 최대 홉 수를 지정한다.
-j host-list host-list에 따라 신축적 원본 경로를 지정한다.
-w timeout timeout에 지정된 milisecond 동안 응답을 기다린다.
target_name 대상 컴퓨터 이름
<출처: 실무자를 위한 네트워크 관리의 이해, 이종일, Jinhan M&B>
♣ 참고사이트
Posted on 2009. 5. 12. 13:28
Filed Under Programming/Network
HANDLE hMutex = CreateMutex(NULL, FALSE, NULL);
ASSERT(hMutex);
WaitForSingleObject(hMutex, INFINITE);
// 리소스 사용
ReleaseMutex(hMutex);
Posted on 2009. 5. 12. 13:28
Filed Under Programming/Network
Posted on 2009. 5. 12. 13:22
보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력하세요.
Posted on 2009. 5. 12. 13:09
Filed Under Programming/Network
Posted on 2009. 5. 12. 13:07
Filed Under Programming/Network
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
예:) GET /webmatter/235026_1.jpg HTTP/1.1[13][10]
└ Method = "OPTIONS" ; Section 9.2
| "GET" ; Section 9.3
| "HEAD" ; Section 9.4
| "POST" ; Section 9.5
| "PUT" ; Section 9.6
| "DELETE" ; Section 9.7
| "TRACE" ; Section 9.8
| "CONNECT" ; Section 9.9
general-header = Cache-Control ; Section 14.9
| Connection ; Section 14.10
| Date ; Section 14.18
| Pragma ; Section 14.32
| Trailer ; Section 14.40
| Transfer-Encoding ; Section 14.41
| Upgrade ; Section 14.42
| Via ; Section 14.45
| Warning ; Section 14.46
request-header = Accept ; Section 14.1
| Accept-Charset ; Section 14.2
| Accept-Encoding ; Section 14.3
| Accept-Language ; Section 14.4
| Authorization ; Section 14.8
| Expect ; Section 14.20
| From ; Section 14.22
| Host ; Section 14.23
| If-Match ; Section 14.24
| If-Modified-Since ; Section 14.25
| If-None-Match ; Section 14.26
| If-Range ; Section 14.27
| If-Unmodified-Since ; Section 14.28
| Max-Forwards ; Section 14.31
| Proxy-Authorization ; Section 14.34
| Range ; Section 14.35
| Referer ; Section 14.36
| TE ; Section 14.39
| User-Agent ; Section 14.43
entity-header = Allow ; Section 14.7
| Content-Encoding ; Section 14.11
| Content-Language ; Section 14.12
| Content-Length ; Section 14.13
| Content-Location ; Section 14.14
| Content-MD5 ; Section 14.15
| Content-Range ; Section 14.16
| Content-Type ; Section 14.17
| Expires ; Section 14.21
| Last-Modified ; Section 14.29
| extension-header
extension-header = message-header
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
response-header = Accept-Ranges ; Section 14.5
| Age ; Section 14.6
| ETag ; Section 14.19
| Location ; Section 14.30
| Proxy-Authenticate ; Section 14.33
| Retry-After ; Section 14.37
| Server ; Section14.38
| Vary ; Section14.44
| WWW-Authenticate ; Section14.47
Status-Code 종류별 | ||
# |
종류 |
상세히 |
1xx |
Informational |
참고 정보로 클라이언트의 요청이 접수되었고 현재 처리하고 있다는 의미입니다. |
2xx |
Success |
요청 받은 것이 성공적으로 처리되었음을 나타냅니다. 이 상태 코드 클래스는 클라이언트의 요구가 성공적으로 수신, 해석 및 접수되었음을 표시합니다. |
3xx |
Redirection |
파일들이 이동되었을 때 쓰이며, 이동하는 위치를 나타내는 Location 헤더가 응답에 포함됩니다. |
4xx |
Client Error |
클라이언트의 요청이 불안전하며, 클라이언트 요청을 성공시키려면 다른 정보가 필요하다는 것을 말합니다. |
5xx |
Server Error |
서버가 에러를 발생시켰으며 요구를 처리할 능력이 없음을 인지한 경우를 표시합니다. HEAD 요구에 응답하는 때를 제외하고는 서버는 에러 상황에 대한 설명및 에러가 잠정적인지 영구적인지에 관한 상황 설명을 포함하는 엔터티를 포함해야 합니다. 사용자 에이전트는 포함된 모든 엔터티를 사용자에게 표시하여야 한다. 이러한 응답 코드는 모든 요구 method에 적용할 수 있습니다. |
Status-Code | Reason-Phrase |
100 Continue (계속)
200 OK 예를 들면: 201 Created (생성 되었음) 202 Accepted (접수 되었음) 203 Non-Authoritative Information(비 인증 정보) 204 No Content(내용이 없음) 205 Reset Content(내용을 지움) 웹브라우저가 추가적인 입력을 위해 사용된 트랜잭션을 지우는 것으로 CGI 애플리케이션에서 데이터를 입력받을때 적합합니다. 206 Partial Content(부분적 내용) 300 Multiple Choices (복수 선택) 301 Moved Permanently (영구 이동) 302 Found 303 See Other(다른 것을 참조) 304 Not Modified(변경되지 않았음)
? ETag 및/또는 Content-Location, 동일한 요구에 대한 200 응답 속에 헤더가 발송되었을 경우 ? Expires, Cache-Control, 및/또는 Vary, 동일한 변이에 대한 이전 응답 속에 발송된 field-value가 상이할 경우 304 응답이 현재 캐시 되지 않은 엔터티를 표시할 때 캐시는 이 응답을 무시하고 조건 없이 요구를 반복해야 합니다. 캐시가 수신한 304 응답을 캐시 엔트리의 갱신에 사용한다면 캐시는 응답이 가지고 있는 새로운 필드 값을 반영하기 위해 엔트리를 반드시 갱신해야 한다. 304 응답은 Message-Body를 포함해서는 안되므로 항상 헤더 필드 다음의 첫 공백 라인으로 종료되어야 합니다. 305 Use Proxy(프락시를 사용할 것) 307 Temporary Redirect(임시 이동) 400 Bad Request(잘못된 요구) 401 Unauthorized (인증되지 않았음) 402 Payment Required 403 Forbidden(금지되었음) 404 Not Found(찾을 수 없음) 405 Method Not Allowed(Method를 사용할 수 없음) 406 Not Acceptable(접수할 수 없음) 407 Proxy Authentication Required(프락시 인증 필요) 408 Request Timeout(요구 시간 초과) 409 Conflict(충돌) 410 Gone (내용물이 사라졌음) 411 Length Required(길이가 필요함) 412 Precondition Failed(사전 조건 충족 실패) 413 Request Entity Too Large(요구 엔터티가 너무 큼) 414 Request-URI Too Long(Request -URI가 너무 김) 415 Unsupported Media Type(지원되지 않는 media type) 416 Requested range not satisfiable 417 Expectation Failed 500 Internal Server Error(서버 내부 에러)
501 Not Implemented(구현되지 않았음) 502 Bad Gateway(불량 게이트웨이) 503 Service Unavailable(서비스를 사용할 수 없음) 504 Gateway Timeout(게이트웨이 시간 초과) 505 HTTP Version Not Supported(지원되지 않는 HTTP 버전) |
출처: Hypertext Transfer Protocol -- HTTP/1.1 [RFC 2616]
Status Code 출처: HTTP Status Code(HTTP 1.1 : RFC 2616)
Posted on 2009. 5. 12. 13:04
Filed Under Programming/Network
#include <windows.h>
#include <stdio.h>
#define _SECOND 10000000
typedef struct _MYDATA {
TCHAR *szText;
DWORD dwValue;
} MYDATA;
VOID CALLBACK TimerAPCProc(
LPVOID lpArg, // Data value.
DWORD dwTimerLowValue, // Timer low value.
DWORD dwTimerHighValue ) { // Timer high value.
MYDATA *pMyData = (MYDATA *)lpArg;
printf( "Message: %s\nValue: %d\n\n", pMyData->szText,
pMyData->dwValue );
//MessageBeep(0);
}
void main( void )
{
HANDLE hTimer;
BOOL bSuccess;
__int64 qwDueTime;
LARGE_INTEGER liDueTime;
MYDATA MyData;
TCHAR szError[255];
MyData.szText = "This is my data.";
MyData.dwValue = 100;
if ( hTimer = CreateWaitableTimer(
NULL, // Default security attributes.
FALSE, // Create auto-reset timer.
"MyTimer" ) ) // Name of waitable timer.
{
__try {
// Create a negative 64-bit integer that will be used to
// signal the timer 5 seconds from now.
qwDueTime = -5 * _SECOND;
// Copy the relative time into a LARGE_INTEGER.
liDueTime.LowPart = (DWORD) ( qwDueTime & 0xFFFFFFFF );
liDueTime.HighPart = (LONG) ( qwDueTime >> 32 );
bSuccess = SetWaitableTimer(
hTimer, // Handle to the timer object.
&liDueTime, // When timer will become signaled.
2000, // Periodic timer interval of 2 seconds.
TimerAPCProc, // Completion routine.
&MyData, // Argument to the completion routine.
FALSE ); // Do not restore a suspended system.
if ( bSuccess ) {
for ( ; MyData.dwValue < 1000; MyData.dwValue += 100 ) {
SleepEx(
INFINITE, // Wait forever.
TRUE ); // IMPORTANT!!! The thread must be in an
// alertable state to process the APC.
}
} else {
wsprintf( szError, "SetWaitableTimer() failed with Error %d.",
GetLastError() );
MessageBox( NULL, szError, "Error", MB_ICONEXCLAMATION );
}
} __finally {
CloseHandle( hTimer );
}
} else {
wsprintf( szError, "CreateWaitableTimer() failed with Error %d.",
GetLastError() );
MessageBox( NULL, szError, "Error", MB_ICONEXCLAMATION );
}