-
大小: 2KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-02
- 語言: 其他
- 標(biāo)簽:
資源簡介
計(jì)算機(jī)網(wǎng)絡(luò)的解析ip數(shù)據(jù)包課程設(shè)計(jì),親測運(yùn)行成功。問題一般出在頭文件的引用上

代碼片段和文件信息
#define?_CRT_SECURE_NO_WARNINGS
?
#include?
#include?
#include?
#include?
#include?
#pragma?comment(lib“Ws2_32.lib“)
?
using?namespace?std;
?
?
//IP首部
typedef?struct?tIPPackHead
{
?
BYTE?ver_hlen;??????//IP協(xié)議版本和IP首部長度。高4位為版本,低4位為首部的長度(單位為4bytes)
BYTE?byTOS;???????//服務(wù)類型
WORD?wPacketLen;?//IP包總長度。包括首部,單位為byte。[Big?endian]
WORD?wSequence;????//標(biāo)識,一般每個(gè)IP包的序號遞增。[Big?endian]
?
union
{
WORD?Flags;?//標(biāo)志
WORD?FragOf;//分段偏移
};
BYTE?byTTL;?????????//生存時(shí)間?
BYTE?byProtocolType;?//協(xié)議類型,見PROTOCOL_TYPE定義
WORD?wHeadCheckSum;????//IP首部校驗(yàn)和[Big?endian]
DWORD?dwIPSrc;?????????//源地址
DWORD?dwIPDes;?????????//目的地址
BYTE?Options;??????????//選項(xiàng)
}?IP_HEAD;
?
int?cnt;
?
int?DecodeIP(char?*buf?int?len)
{
int?n?=?len;
if?(n?>=?sizeof(IP_HEAD))
{
IP_HEAD?iphead;
iphead?=?*(IP_HEAD*)buf;
?
cout?<“第?“<
cout?<“協(xié)議版本:“?<<(iphead.ver_hlen?>>?4)?< cout?<“首部長度:“?<((iphead.ver_hlen?&?0x0F)?<2)?< cout?<“服務(wù)類型:Priority:?“?<(iphead.byTOS?>>?5)?<“Service:?“?<((iphead.byTOS?>>?1)?&?0x0f)?< cout?<“IP包總長度:“?< cout?<“標(biāo)識:“?< cout?<“標(biāo)志位:“?<“DF=“?<((iphead.Flags?>>?14)?&?0x01)?<“MF=“?<((iphead.Flags?>>?13)?&?0x01)?< cout?<“片偏移:“?<(iphead.FragOf?&?0x1fff)?< cout?<“生存周期:“?<(int)iphead.byTTL?< cout?<“協(xié)議類型:“?< cout?<“首部校驗(yàn)和:“?< cout?<“源地址:“?< cout?<“目的地址:“?<?
cout?<“==============================================================“?<?
}
return?0;
}
void?AutoWSACleanup()
{
::WSACleanup();
}
int?main()
{
int?n;
WSADATA?wd;
n?=?WSAStartup(MAKEWORD(2?2)?&wd);
if?(n)
{
cout?<“WSAStartup函數(shù)錯(cuò)誤!“?< return?-1;
}
atexit(AutoWSACleanup);
//創(chuàng)建SOCKET
SOCKET?sock?=?socket(AF_INET?SOCK_RAW?IPPROTO_IP);
if?(sock?==?INVALID_SOCKET)
{
cout?< return?0;
}
//獲取本機(jī)地址
char??name[128];
if?(-1?==?gethostname(name?sizeof(name)))
{
closesocket(sock);
cout?< return?0;
}
struct?hostent?*?pHostent;
pHostent?=?gethostbyname(name);
//綁定本地地址到SOCKET句柄
sockaddr_in?addr;
addr.sin_family?=?AF_INET;
addr.sin_addr?=?*(in_addr*)pHostent->h_addr_list[0];?//IP
addr.sin_port?=?8888;?//端口,IP層端口可隨意填
if?(SOCKET_ERROR?==?bind(sock?(sockaddr?*)&addr?sizeof(addr)))
{
closesocket(sock);
cout?< return?0;
}
?
//設(shè)置該SOCKET為接收所有流經(jīng)綁定的IP的網(wǎng)卡的所有數(shù)據(jù),包括接收和發(fā)送的數(shù)據(jù)包
u_long?sioarg?=?1;
DWORD?wt?=?0;
if?(SOCKET_ERROR?==?WSAIoctl(sock?SIO_RCVALL?&sioarg?sizeof(sioarg)?NULL?0?&wt?NULL?NULL))
{
closesocket(so
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????????57??2018-07-02?09:51??readme.txt
?????文件???????3776??2018-07-02?09:46??ipjx.cpp
?????文件???????1027??2018-07-02?09:14??mstcpip.h
-----------?---------??----------?-----??----
?????????????????4860????????????????????3
- 上一篇:葡萄酒支持向量機(jī)SVM分類
- 下一篇:Axure從入門到精通小樓
評論
共有 條評論