網路資料報偵聽基本原理:*/
#include
#include
#include
#include
#include
#define status_failed 0xffff //定義異常出錯**
#define max_pack_len 65535 //接收的最大ip報文
#define max_addr_len 16 //點分十進位制位址的最大長度
#define max_proto_text_len 16 //子協議名稱(如"tcp")最大長度
#define max_proto_num 12 //子協議數量
#define max_hostname_lan 255 //最大主機名長度
#define cmd_param_help true
handle hfile = null;
handle hparse = null;
typedef struct _iphdr
ip_header;
typedef struct _tcphdr //定義tcp首部
tcp_header;
typedef struct _udphdr //定義udp首部
udp_header;
typedef struct _icmphdr //定義icmp首部
icmp_header;
typedef struct _protomap //定義子協議對映表
protomap;
protomap protomap[max_proto_num]=,
, ,
, ,
, ,
, ,
, ,
};socket sockraw;
char tcpflag[6]=; //定義tcp標誌位
bool paramtcp =false; // -t關注tcp 報文
bool paramudp =false; // -u關注udp 報文
bool paramicmp =false; // -i關注icmp報文
bool paramdecode=false; // -d對協議進行解碼
char *strfromipfilter=null; // 源ip位址過濾
char *strdestipfilter=null; // 目的位址過濾
char *strsensitive=null; // 敏感字串
int iportfilter=0; // 埠過濾
int iprotocol, ittl;
char szprotocol[max_proto_text_len];
char szsourceip[max_addr_len], szdestip[max_addr_len];
int decodeippack(char *, int); //ip解包函式
int decodetcppack(char *, int); //tcp解包函式
int decodeu***ack(char *, int); //udp解包函式
int decodeicmppack(char *, int); //icmp解包函式
void checksockerror(int, char*); //出錯處理函式
char * checkprotocol(int); //協議檢查
void usage(void); //使用說明
bool getcmdline(int, char **); //命令列引數處理
void main(int argc, char ** argv)
;usage();
if(getcmdline(argc, argv)==cmd_param_help) exit(0);
//初始化socket
wsadata wsadata;
ierrorcode = wsastartup(makeword(2,1),&wsadata);
checksockerror(ierrorcode, "wsastartup");
sockraw = socket(af_i*** , sock_raw , ipproto_ip);
checksockerror(sockraw, "socket");
//獲取本機ip位址
char far name[max_hostname_lan];
ierrorcode = gethostname(name, max_hostname_lan);
checksockerror(ierrorcode, "gethostname");
struct hostent far * phostent;
phostent = (struct hostent * )malloc(sizeof(struct hostent));
phostent = gethostbyname(name);
sockaddr_in sa;
sa.sin_family = af_i***;
sa.sin_port = htons(6000);
memcpy(&sa.sin_addr.s_un.s_addr, phostent->h_addr_list[0], phostent->h_length);
free(phostent);
ierrorcode = bind(sockraw, (psockaddr)&sa, sizeof(sa));
checksockerror(ierrorcode, "bind");
//設定sock_raw為sio_rcvall,以便接收所有的ip包
dword dwbufferlen[10] ;
dword dwbufferinlen = 1 ;
dword dwbytesreturned = 0 ;
ierrorcode=wsaioctl(sockraw, sio_rcvall,&dwbufferinlen, sizeof(dwbufferinlen),
&dwbufferlen, sizeof(dwbufferlen),&dwbytesreturned , null , null );
checksockerror(ierrorcode, "ioctl");
//偵聽ip報文
while(1)
::closehandle(hfile);
::closehandle(hparse);
}//ip解包程式
int decodeippack(char *buf, int ibufsize)
//printf("/n");
return true;
}//協議識別程式
char * checkprotocol(int iprotocol)
解包kwargs python的封包與解包
將多個值賦值給乙個變數時,python會自動將這些值封裝成元組,這個特性稱之為封包 a 1,2,3 print a,type a 1,2,3 當函式返回多個數值時,也會進行封包 def test return 1,2,3 a test print a,type a 1,2,3 實踐中,很少主動使用封...
Python 序列封包與序列解包
什麼叫做序列?序列可以理解為可以進行切片 相加相乘 索引 成員資格 用關鍵字in not in關鍵字判斷某個元素在不在這個序列 例如 列表 元組 字串就是常見的序列。python中內建的三種資料結構 列表 元組 字典,只有字典不是序列 序列封包例 序列封包,把多個值賦給乙個變數 a 1,2,3 pr...
python元祖封包 python的封包與解包
python的封包與解包 1.python 封包 將多個值賦值給乙個變數時,python會自動將這些值封裝成元組,這個特性稱之為封包 a 1,2,3 print a,type a 1,2,3 當函式返回多個數值時,也會進行封包 def test return 1,2,3 a test print a...