网络“信使服务”原理及Delphi下的实现

时间:2010-01-29 08:55:54  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读: />其实这是win2000中提供的一项服务(依靠netapi32.dll中的api)-“信使服务”。它本来是为了在局域网中简单对话或者提示而出现的,可现在却被用在互联网上用来做广告了,而且对于一般的用户(区别于计算机高手)是没有办法拒绝的!下面是我原来帮朋友编写的一个程序部分核心代码,通过它来解释一下,并且给出如何拒绝这种服务的办法。1.编写信使服务部分 ...
  正文:你是不是碰到这种情况:好好的在做某事,突然之间弹出一个对话框,请你访问某某网站。反正我碰到不少。(注:只有win2000以上的版本提供这个功能)

那么它是怎么来的(废话:肯定是别人发的咯)?我是说它是怎么做出来的,就是它的原理是什么?

其实这是win2000中提供的一项服务(依靠netapi32.dll中的api)-“信使服务”。它本来是为了在局域网中简单对话或者提示而出现的,可现在却被用在互联网上用来做广告了,而且对于一般的用户(区别于计算机高手)是没有办法拒绝的!下面是我原来帮朋友编写的一个程序部分核心代码,通过它来解释一下,并且给出如何拒绝这种服务的办法。

1.编写信使服务部分
    信使服务的核心是netapi32.dll提供的“netmessagebuffersend”api函数,这里写出它的在Delphi中的声明,因为在delphi中并没有给出它的object pascal声明,所以要自己在单元中声明:


function netmessagebuffersend(servername:pwidechar;
toname:pwidechar;
fromname:pwidechar;
buf: pwidechar;
var buflen:integer):integer;stdcall; external 'netapi32.dll' name 'netmessagebuffersend';

注意其中的参数都是pwidechar类型哟!而且不是普通的pcha类型,所以我们要做个简单的转化,转化的过程到是很简单,使用stringtowidechar函数即可。
现在解释一下其中的参数:

servername:服务器名,可以写你的名字,当然也可以用nil;
toname:接受方的ip地址;(注意:这里不是integer类型!)
fromname:发送人的名字,就是你的了,你可以写你的名字,也可以写别的了;
buf:消息主体的内容;
buflen:消息主体的大小,设大点就可以了。

现在我们可以设置几个string变量了,假设string1是你的名字,string2是接受者的ip,string3是消息内容。


const
max_length=1025;//设置消息内容的大小,够大了吧,呵呵
var
string1,string2,string3:string;
photoshop/ target=_blank class=infotextkey>pstring1,pstring2:array[0..28] of pwidechar;
pstring3:array[0..1024]o of pwidechar;
length,i,j:integer;
//下面先进行一个转换,讲string类型转换成api函数的pwidechar类型
begin
  for i:=0 to 28 do pstring1[i]:=#0;//将所有的字节都填充#0字符
  stringtowidechar(string1,psting1,length);//这个rtl函数可以完成这个转换
  for i:=0 to 28 do pstring2[i]:=#0
  stringtowidechar(string2,psting2,length);
  for i:=0 to 1024 do pstring1[i]:=#0
  stringtowidechar(string3,psting3,length);
  //length返回实际转换的空间(字节长度),不要管他!
//转换完成了,现在可以调用这个api了
j:=netmessagebuffersend(nil,@psting2,@pstring1,@pstring3,max_length);
  //判断一下是否发送成功
if j<>0 then
  begin
    messagebox(handle,pchar('send error!'),pchar('error'),mb_ok)
    else
    messagebox(handle,pchar('send success!'),pchar('ok'),mb_ok);
  end;

整个功能大致就完成了。你可以发挥你的想象,如:
对一段ip发送消息,其实就是一个循环而已,但在ip的处理字符串中有一点小技巧的(我的程序就实现了这个功能,呵呵);
还可以对一个ip地址进行多次的发送,轰炸它,呵呵

2.如何禁止信使服务:
  禁止信使服务有几种方法,我这里就讲两种,一种是直接操作,一种是在程序中实现的方法。
直接操作:你可以按下面这个步骤来禁止服务
开始菜单->控制面板->管理工具->服务->messenger服务,右键点击出弹出菜单,按“停止服务”即可;
程序中的操作:
在我这个程序中其实用到一个小的技巧,因为在dos环境下windows提供了著名的net命令,你只要在dos窗口下敲上如下命令:net /?就可以看到net提供的各种服务了,我们这里就用到了stop和start两个子服务!那么我们就可以直接隐藏运行他们就可以了,呵呵简单吧?代码如下:
网络“信使服务”原理及Delphi下的实现》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Language/Delphi/12567.html


关键字:

关于《网络“信使服务”原理及Delphi下的实现》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td