資源簡介
里面包括C語言源碼,用到的各種庫和安裝包、實驗報告等。用DEV C++開發的,詳細信息可見 http://blog.csdn.net/zuzhiang/article/details/78934402
代碼片段和文件信息
#define?HAVE_REMOTE
#define?LINE_LEN?16
#include?“winsock.h“
#include?
#include?“pcap.h“
typedef?struct?ip_address
{?//ip地址?
????u_char?b1;
????u_char?b2;
????u_char?b3;
????u_char?b4;
}?ip_address;
typedef?struct?mac_address
{//mac地址?
u_char?b1;
u_char?b2;
u_char?b3;
u_char?b4;
u_char?b5;
u_char?b6;
}?mac_address;
typedef?struct?ethe_header
{?//mac幀首部?
mac_address?mac_dest_address;
mac_address?mac_source_address;
u_short?ether_type;
}?ethe_header;
typedef?struct?ip_header
{?//ip地址首部?
????u_char??ver_ihl;????????//?版本?(4?bits)?+?首部長度?(4?bits)
????u_char??tos;????????????//?服務類型(Type?of?service)?
????u_short?tlen;???????????//?總長(Total?length)?
????u_short?identification;?//?標識(Identification)
????u_short?flags_fo;???????//?標志位(Flags)?(3?bits)?+?段偏移量(Fragment?offset)?(13?bits)
????u_char??ttl;????????????//?存活時間(Time?to?live)
????u_char??proto;??????????//?協議(Protocol)
????u_short?crc;????????????//?首部校驗和(Header?checksum)
????ip_address??saddr;??????//?源地址(Source?address)
????ip_address??daddr;??????//?目的地址(Destination?address)
????u_int???op_pad;?????????//?選項與填充(Option?+?Padding)
}?ip_header;
typedef?struct?udp_header
{?//UPD首部?
????u_short?sport;??????????//?源端口(Source?port)
????u_short?dport;??????????//?目的端口(Destination?port)
????u_short?len;????????????//?UDP數據包長度(Datagram?length)
????u_short?crc;????????????//?校驗和(Checksum)
}?udp_header;
typedef?struct?tcp_header
{?//TCP首部?
u_short?sport;??????????//?源端口(16位)
????u_short?dport;??????????//?目的端口(16位)
????u_int?num;??????????????//?序列號?(32位)?
u_int?ack;??????????????//?確認號(32位)?
u_short?sum;????????????//?數據偏移(4位),保留(6位),標志位(6位)?
u_short?windonw;????????//?窗口?(16位)?
u_short?crc;????????????//?檢驗和?(16位)?
u_short?ugr;????????????//?緊急指針(16位)?
}?tcp_header;
void?packet_handler(u_char?*?param?const?struct?pcap_pkthdr?*?header?const??u_char?*pkt_data);
int?main()
{
????pcap_if_t?*?alldevs?*device;
int?i?=?0;
int?iNum;
u_int?netmask;
struct?bpf_program?fcode;
pcap_t?*?adhandle;
char?errbuf[PCAP_ERRBUF_SIZE];
//修改這里可以更改捕獲的數據包使用的協議類型?
????char?packet_filter[]?=?“(ip?and?udp)?or?(ip?and?tcp)?or?(ip?and?icmp)“;?
????
if?(pcap_findalldevs_ex(PCAP_SRC_IF_STRING?NULL?&alldevs?errbuf)?==?-1)
{?//獲取設備列表?
fprintf(stderr“無法打開網絡設備:%s\n“?errbuf);
return?1;
}
for?(device?=?alldevs;?device??!=?NULL;?device?=?device->next)
{?//打印列表?
if?(i?==?0)
{
printf(“請按CTRL?+?C退出!\n\n“);
printf(“網絡設備如下:\n“);
}
printf(“%d.?%s\n“?++i?device?->?name);
if?(device->description)
printf(“?(%s)\n“?device->description);
else?
printf(“沒有設備描述信息!“);?
}
if?(i?==?0)
{
printf(“\n請先安裝WinPcap!“);
return?-1;
}
printf(“請選擇網絡設備接口:(1?-?%d):“?i);
scanf(“%d“?&iNum);
if?(iNum?1?||?iNum?>?i)
{
printf(“設備不存在!\n“);
pcap_freealldevs(alldevs);
return?-1;
}
//跳轉到已選設備?
????for?(device?=?alldevs?i?=?0;i??nexti+
- 上一篇:C語言版本2048游戲.rar
- 下一篇:進程同步與互斥C++
評論
共有 條評論