WIN2K命令列Sniffer的原始碼

2021-04-06 20:24:31 字數 3459 閱讀 5285

win2k命令列sniffer的原始碼

以下是為**:

#include 

#include 

#include 

#include "mstcpip.h" 

#pragma comment(lib,"ws2_32.lib")

#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

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=true; // -d對協議進行解碼 

char *strfromipfilter=null; // 源ip位址過濾 

char *strdestipfilter=null; // 目的位址過濾 

int decodeippack(char *,int); 

int decodetcppack(char *); 

int decodeu***ack(char *); 

int decodeicmppack(char *); 

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_inet , 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_inet; 

sa.sin_port = htons(6000); 

memcpy(&sa.sin_addr.s_un.s_addr, phostent->h_addr_list[0], phostent->h_length); 

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) 

//ip解包程式 

int decodeippack(char *buf, int ibufsize) 

//printf("/n"); 

return true; 

}  //sock錯誤處理程式 

void checksockerror(int ierrorcode, char *perrormsg) 

//協議識別程式 

char * checkprotocol(int iprotocol) 

printf("/n"); 

return true; 

}  //udp解包程式 

int decodeu***ack(char * udpbuf) 

//icmp解包程式 

int decodeicmppack(char * icmpbuf) 

//命令列引數處理 

bool getcmdline(int argc, char ** argv) 

Win2K服務詳解

svchost.exe 檔案對那些從動態鏈結庫中執行的服務來說是乙個普通的主機程序名 最基本的系統程序 也就是說,這些程序是系統執行的基本條件,有了這些程序,系統就能正常執行 ss.exe session manager csrss.exe 子系統伺服器程序 winlogon.exe 管理使用者登入...

關機 win2k或以上

handle htoken token privileges tkp get a token for this process.if openprocesstoken getcurrentprocess token adjust privileges token query,htoken retur...

Win2k下isapi dll除錯設定

1.控制面板 管理工具 internet services manager 要設定的 屬性 主目錄 設定最下面的 應用程式保護 為 低 iis 程序 將存放dll的虛擬目錄同樣設定 2.控制面板 管理工具 服務 將http ftp smtp服務設定為手工開啟 3.控制面板 管理工具 本地安全設定 本...