¼ÆËã»úÍøÂçʵÑéÖ¸µ¼Êé ÏÂÔØ±¾ÎÄ

//

// Check for the host and port arguments //

if (argc != 3) { fprintf(stderr,\ return; }

nPort = atoi(argv[2]); //

// Initialize WinSock and check the version //

nRet = WSAStartup(wVersionRequested, &wsaData); if (wsaData.wVersion != wVersionRequested) { fprintf(stderr,\ return; } //

// Go do the stuff a stream client does //

StreamClient(argv[1], nPort); //

// Release WinSock //

WSACleanup(); }

////////////////////////////////////////////////////////////

void StreamClient(char *szServer, short nPort) {

printf(\ szServer, nPort);

//

// Find the server //

LPHOSTENT lpHostEntry;

lpHostEntry = gethostbyname(szServer); if (lpHostEntry == NULL) {

PRINTERROR(\ return;

45

} //

// Create a TCP/IP stream socket //

SOCKET theSocket;

theSocket = socket(AF_INET, // Address family SOCK_STREAM, // Socket type IPPROTO_TCP); // Protocol if (theSocket == INVALID_SOCKET) { PRINTERROR(\ return; } //

// Fill in the address structure //

SOCKADDR_IN saServer;

saServer.sin_family = AF_INET;

saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list); // ^ Server's address saServer.sin_port = htons(nPort); // Port number from command line //

// connect to the server //

int nRet;

nRet = connect(theSocket, // Socket (LPSOCKADDR)&saServer, // Server address sizeof(struct sockaddr));// Length of server address structure if (nRet == SOCKET_ERROR) { PRINTERROR(\ closesocket(theSocket); return; } //

// Send data to the server //

char szBuf[256];

strcpy(szBuf, \ nRet = send(theSocket, // Connected socket szBuf, // Data buffer strlen(szBuf)+1, // Length of data 0); // Flags

46

}

if (nRet == SOCKET_ERROR) { PRINTERROR(\ closesocket(theSocket); return; } //

// Wait for a reply //

nRet = recv(theSocket, szBuf, sizeof(szBuf), 0); if (nRet == SOCKET_ERROR) { PRINTERROR(\ closesocket(theSocket); return; } //

// Display the received data //

printf(\closesocket(theSocket); return;

// Connected socket // Receive buffer

// Size of receive buffer // Flags

£¨Èý£©Ê¾ÀýÔËÐÐ £¨ÂÔ£©

¡¾ÊµÑé²½Öè¡¿

£¨Ò»£©TCPЭÒé·ÖÎö

ÔËÐиø¶¨µÄ³ÌÐò(ÓÉÖ¸µ¼½ÌʦÌṩ)£¬²ÉÓá±½âÂëÈí¼þ¡±¸ú×Ù²¶»ñͨÐű¨ÎÄ£¬

È«Ãæ·ÖÎöTCPͨÐÅ»úÖÆ¡£

·ÖÎöÁ¬½ÓʱÈý´ÎÎÕÊÖ¹ý³Ì;

·ÖÎö½ÓÊÕ·½ÊÇÈçºÎÓ¦´ðµÄ£»

¶Ï¿ªÁ¬½Óʱ¹ý³Ì£¨ÓÃÁ˼¸¸öFrame?£©£»

ŪÇå³þ°ü˳ÐòºÅµÄ×÷Óᢼ°²úÉú¡¢±ä»¯µÄ¹æÂÉ£» ŪÇå³þÈçºÎʵÏÖÁ÷¿ØµÄ£»

£¨¶þ£©UDPЭÒé·ÖÎö

ÔËÐиø¶¨µÄ³ÌÐò(ÓÉÖ¸µ¼½ÌʦÌṩ)£¬²ÉÓá±½âÂëÈí¼þ¡± ¸ú×Ù²¶»ñͨÐű¨ÎÄ£¬

47

È«Ãæ·ÖÎöUDPͨÐÅ»úÖÆ¡£

£¨Èý£©³ÌÐòÉè¼Æµ÷ÊÔ¡¢Í¨ÐŹý³Ì·ÖÎö

1¡¢ÊµÑéǰÉè¼ÆºÃ³ÌÐò£¨²Î¼ûʵÑéÒªÇó£© 2¡¢ÉÏ»úǰ£¬Í¨¹ý¼ì²é£¨´¦Àí£©£¬È·±£ÊµÑéÓûúÍøÂçÁ¬½ÓÕý³£

3¡¢ÔËÐпª·¢¹¤¾ß£¬ÊäÈëÒÑÉè¼ÆºÃµÄ³ÌÐò´úÂ루°üÀ¨·þÎñÆ÷¶ËºÍ¿Í»§¶Ë£©

4¡¢ÔÚµ¥»úÉϵ÷ÊÔÔËÐгÌÐò£¬Ñ¡ÔñÒ»¸ö³¤¶ÈΪ10k×Ö½Ú×óÓÒµÄÊý¾ÝÎļþ£¬½øÐÐÍøÂç´«Êä¡£ 5¡¢ÔËÐÐÍøÂçЭÒé½âÂ빤¾ß(Èçwireshark)£¬¸ú×Ù³ÌÐòÕû¸öͨÐŹý³Ì£¬²¢½øÐзÖÎö¡£ ½¨Á¢Á¬½Ó

Êý¾ÝµÄ·¢ËÍÓë½ÓÊÕ£»

¹Ø±ÕÁ¬½Ó send(1) buffer 1518

6¡¢ÐÞ¸ÄÔ´³ÌÐò£¬½«Ã¿´Î´«ÊäµÄÊý¾Ý£¨Í¨¹ýsend·½·¨µ÷Ó㩳¤¶ÈÒÀ´ÎÉ趨Ϊ1¡¢100¡¢1460¡¢6000×Ö½Ú£¬ÔËÐгÌÐò£¬½èÖúÓÚÍøÂçЭÒé½âÂ빤¾ß£¬ÒÀ´Î¼Ç¼¶ÔÓ¦µÄÔÚÍøÂçÉÏËù´«ÊäµÄÓÐЧÊý¾Ý°üµÄ¸öÊý£¬ÌîдÏÂ±í£¬²¢½øÐзÖÎö¡£ ÐòºÅ 1 2 3 4

Îļþ·Ö¸î³ß¶È£¨×Ö½Ú£© 10 100 1460 6000 Îļþ×ܳ¤£¨×ÖÎļþ·Ö¸î¿é½Ú£© Êý£¨¸ö£© 10311 1031+1 ¾­ÍøÂç´«ÊäµÄÊý¾Ý¿éÊý 9 ´«ÊäЧÂÊ£¨¶Ô·¢ËÍ·½£© 10311/()*100% ¡¾ÊµÏÖÌáʾ¡¿

1. ×¢ÒâÇø±ð³ÌÐòÀàÐÍ£º¿ØÖÆÌ¨Ó¦ÓóÌÐòÓëWindowsÓ¦ÓóÌÐò ¿ÉÒÔÔÚʾÀý³ÌÐòµÄ»ù´¡Ö®ÉÏÍê³ÉÉè¼ÆÓëµ÷ÊÔÈÎÎñ¡£

2£®Èô²ÉÓÃC±à³Ìʱ£¬¿É²Î¿¼Ê¹ÓÃÏÂÁÐÎļþ²Ù×÷Óï¾ä»òº¯Êý£º £¨1£©FILE * fp //¶¨ÒåÎļþÖ¸Õë £¨2£©fopen() //´ò¿ªÎļþ

£¨3£©fread() //´ÓÎļþÖжÁ³öÒ»¿éÊý¾Ý £¨4£©fwrite() //½«Ò»¿éÊý¾Ýдµ½´ÓÎļþÖÐ

£¨5£©feof() //ÅжÏÎļþÊÇ·ñ½áÊø£¨Ö¸ÕëÖ¸Ïòβ²¿£¬ÒÑÎÞÊý¾Ý¿É¶Á£© £¨6£©fclsoe() //¹Ø±ÕÎļþ

3. Èô²ÉÓÃC±à³Ìʱ£¬¿É¿¼ÂǶ¨ÒåʹÓÃÒ»¸ö½á¹¹Ì壬´æ·ÅÎļþÃû¡¢³¤¶ÈµÈÐÅÏ¢£¬ ·¢ËÍ·½ÏÈ·¢Ë͸ýṹÌ壬ÔÙ·¢ËÍÎļþµÄÊý¾Ý¿éÁ÷¡£

4. ÔËÐÐÍøÂçЭÒé½âÂ빤¾ß£¨Èçsniffer pro£©£¬¸ú×Ù³ÌÐòÕû¸öͨÐŹý³Ìʱ£¬Í¨ÐÅË«·½±ØÐëλÓÚÁ½Ì¨²»Í¬µÄ΢»úÉÏ£¬ÔÚ¸ú×ÙǰÐèÒª°´µØÖ·£¨IP£©É趨²¢Ê¹ÓÃfilter£¬À´captureͨÐÅË«·½µÄµÄÊý¾Ý°ü£¬filterµÄÄÚÈÝΪ˫·½µÄIP£¨Ë«Ïò£©¡£

¡¾·ÖÎöÓë˼¿¼¡¿

48