資源簡介
計算機網絡的解析ip數據包課程設計,親測運行成功。問題一般出在頭文件的引用上

代碼片段和文件信息
#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協議版本和IP首部長度。高4位為版本,低4位為首部的長度(單位為4bytes)
BYTE?byTOS;???????//服務類型
WORD?wPacketLen;?//IP包總長度。包括首部,單位為byte。[Big?endian]
WORD?wSequence;????//標識,一般每個IP包的序號遞增。[Big?endian]
?
union
{
WORD?Flags;?//標志
WORD?FragOf;//分段偏移
};
BYTE?byTTL;?????????//生存時間?
BYTE?byProtocolType;?//協議類型,見PROTOCOL_TYPE定義
WORD?wHeadCheckSum;????//IP首部校驗和[Big?endian]
DWORD?dwIPSrc;?????????//源地址
DWORD?dwIPDes;?????????//目的地址
BYTE?Options;??????????//選項
}?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?<“協議版本:“?<<(iphead.ver_hlen?>>?4)?< cout?<“首部長度:“?<((iphead.ver_hlen?&?0x0F)?<2)?< cout?<“服務類型:Priority:?“?<(iphead.byTOS?>>?5)?<“Service:?“?<((iphead.byTOS?>>?1)?&?0x0f)?< cout?<“IP包總長度:“?< cout?<“標識:“?< cout?<“標志位:“?<“DF=“?<((iphead.Flags?>>?14)?&?0x01)?<“MF=“?<((iphead.Flags?>>?13)?&?0x01)?< cout?<“片偏移:“?<(iphead.FragOf?&?0x1fff)?< cout?<“生存周期:“?<(int)iphead.byTTL?< cout?<“協議類型:“?< cout?<“首部校驗和:“?< cout?<“源地址:“?< cout?<“目的地址:“?<?
cout?<“==============================================================“?<?
}
return?0;
}
void?AutoWSACleanup()
{
::WSACleanup();
}
int?main()
{
int?n;
WSADATA?wd;
n?=?WSAStartup(MAKEWORD(2?2)?&wd);
if?(n)
{
cout?<“WSAStartup函數錯誤!“?< return?-1;
}
atexit(AutoWSACleanup);
//創建SOCKET
SOCKET?sock?=?socket(AF_INET?SOCK_RAW?IPPROTO_IP);
if?(sock?==?INVALID_SOCKET)
{
cout?< return?0;
}
//獲取本機地址
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;
}
?
//設置該SOCKET為接收所有流經綁定的IP的網卡的所有數據,包括接收和發送的數據包
u_long?sioarg?=?1;
DWORD?wt?=?0;
if?(SOCKET_ERROR?==?WSAIoctl(sock?SIO_RCVALL?&sioarg?sizeof(sioarg)?NULL?0?&wt?NULL?NULL))
{
closesocket(so
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????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
- 上一篇:葡萄酒支持向量機SVM分類
- 下一篇:Axure從入門到精通小樓
評論
共有 條評論