VisualC 打造Windows信使服务程序
2008-04-09 04:09:51来源:互联网 阅读 ()
一、实现方法
信使服务为大家在网络上提供了简便、快捷的聊天方式,所以网上也有一些改进了的信使服务发送程序,使信息的发送可以按照自己的意愿来进行而不受微软提供的"net send"所限制。如果你经常上网,也许会收到通过信使服务发来的广告或者其他莫名其妙的信息,而在"信使服务"窗口中所显示出来的发送方的计算机名或者IP地址和你自己的竟然一样。如果你遇到过这种情况,那么你想不想知道这种改进了的信使服务发送程序是怎么实现的呢?
本实例将要带你去剖析一下Windows的信使服务,我们将从一个程序员的角度来看看这个信使服务发送程序是如何实现的。其实实现信使服务的整个过程很简单,我们只需要调用一个API函数:
NET_API_STATUS NetMessageBufferSend(
LPWSTR servername,
LPWSTR msgname,
LPWSTR fromname,
LPBYTE buf,
DWORD buflen
);
其中该函数的参数说明如下:
servername:计算机名,该函数将在指定的这个计算机上面执行。如果为NULL,则表示为本地计算机,通常我们都将其设置为NULL。
msgname:目标计算机的名字或者IP地址。
fromname:源计算机的名字或者IP地址。
buf:指向一个信息缓冲区的指针,在这里你可以填上你想发送的信息。要注意的是,这个参数用的是Unicode编码。
buflen:上述信息缓冲区中的字节数。
现在函数已经介绍完了,通过这个函数我们可以发现如果想实现匿名的信使服务实在是太简单--只需要在fromname中填上一个假冒的计算机名或者IP地址就行了。下面给出一个实际例子,在这个程序中,我们从命令行参数接受目标计算机和源计算机名字(IP地址),同时我们还可以设定信息发送的次数。
二、编程步骤
1、启动Visual C 6.0,新建项目netsend,选择控制台模式;
2、在项目中添加新文件netsend.c;
3、添加代码,编译运行程序。
三、程序代码
/////////////////////////////////////////////////////////////////////////
#define _UNICODE
#define UNICODE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include <windows.h>
#include <locale.h>
#include <lm.h>
#pragma comment(lib,"netapi32.lib")
int wmain(int argc, wchar_t *argv[])
{
int count;
wchar_t *wdest, *wfrom, *buffer,*wtarget;
DWORD dwReturn;
if((argc <4) || (argc >5))
{
printf("Usge: %S <DestIP> <SourIP> <Message> [Count]\n",argv[0]);
printf("Count: Count means number of times to send message,default is 1.\n");
return 0;
}
wdest = argv[1]; //目标计算机
wfrom = argv[2]; //源计算机
buffer = argv[3]; //发送的信息
count = _wtoi(argv[4]); //发送次数,缺省为1次
if(count ==0)
count = 1;
printf("count = %d\n",count);
dwReturn = NetMessageBufferSend(NULL, wdest, wfrom,
(LPBYTE)buffer, 2*lstrlen(buffer)); //因为buffer是Unicode编码,所以需要乘以2
if(dwReturn == NERR_Success)
{
printf("Send OK!");
while(count-->1)
{
NetMessageBufferSend(NULL, wtarget, wfrom, (LPBYTE)buffe,2*lstrlen(buffer));
}
return 0;
}
if(dwReturn == NERR_NameNotFound)
{
printf("The user name could not be found.\n");
return 0;
}
if(dwReturn == NERR_NetworkError)
{
printf("A general failure occurred in the network hardware.\n");
return 0;
}
if(dwReturn == ERROR_NOT_SUPPORTED)
{
printf("This network request is not supported.\n");
return 0;
}
if(dwReturn == ERROR_INVALID_PARAMETER)
{
printf("The specified parameter is invalid.\n");
return 0;
}
if(dwReturn == ERROR_ACCESS_DENIED)
{
printf("The user does not have access to the requested information.\n");
return 0;
}
else
printf("Unknown error!\n");
return 0;
}
四、小结
本实例开发一个Windows信使服务程序,以帮助读者深入了解Windows信使服务实现的内幕。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash