论坛: 原创软件 标题: 我问一个netsend的问题 复制本贴地址    
作者: fora [fora]    论坛用户   登录
如果我做网络管理的话,我想以网络管理员的身份向某台主机发送信息,也就是常用的net send,要是编程实现的话,怎么才能把发送者自定义的签名加上去,就象是匿名而不显示自己的机器名,还有就是如何群发,给一个工作组发。
在对方接收的信使服务为
从“管理员”(这个名字是自己定义的,可更换)到XXX的消息“。。。。。。。。”

这个是使用的那些函数,和尚,给指教一下

地主 发表时间: 06/02 21:03

回复: ricky [ricky]   版主   登录
char DstIp[20];
// 取得目标IP地址
memcpy (DstIp,Ip,16);

// 把目标IP转换成unicode
int nLen = MultiByteToWideChar(CP_ACP, 0, DstIp, -1, NULL, 0);
LPWSTR LPWIp = new WORD[nLen];
MultiByteToWideChar(CP_ACP, 0, DstIp , -1, LPWIp, nLen);

int ret = NetMessageBufferSend(NULL,LPWIp,Msg_Name,(LPBYTE)Msg_Main,MainLen*2);
if (ret == NERR_Success)
{
char *buf = new char[32];
sprintf(buf,"%s",DstIp);
PostMessage(DlgHwnd,WM_PROC_DST,(WPARAM)buf,1);
}
delete LPWIp;
PostMessage(DlgHwnd,WM_PROC_CMP,0,(long)Ip);
return 0;
}


B1层 发表时间: 06/03 11:34

回复: hacants [hacants]   论坛用户   登录
请问楼上的,该程序保存为什么格式?
不好意思,我很菜。
相信我,我会努力的^o^


[此贴被 小蚂蚁(hacants) 在 06月03日16时55分 编辑过]

B2层 发表时间: 06/03 16:35

回复: fora [fora]   论坛用户   登录
那天看到NetBufferSend,查了查,网上有很好的例子。
下面的程序在delphi6中可以编译通过,source可以自己定义,如果为空的话,会以本主机的名义发送信息。
你可以是直接调用netapi32这个动态链接库。
也可以用JCL,当然本质上也是调用这个dll里的函数。

function NetSend(Dest, Source, Msg: string) : Longint; overload;
type
  TNetMessageBufferSendFunction = function(servername, msgname, fromname: PWideChar;
               Buf: PWideChar; buflen: Cardinal) : Longint; stdcall;
var
  NetMessageBufferSend: TNetMessageBufferSendFunction;
  SourceWideChar: PWideChar;
  DestWideChar: PWideChar;
  MessagetextWideChar: PWideChar;
  Handle: THandle;
begin { NetSend }
  Handle := LoadLibrary('NETAPI32.DLL');
  if Handle=0 then
  begin
    Result := GetLastError;
    Exit;
  end; { Handle=0 }
  @NetMessageBufferSend := GetProcAddress(Handle, 'NetMessageBufferSend');
  if @NetMessageBufferSend=nil then
  begin
    Result := GetLastError;
    Exit;
  end; { @NetMessageBufferSend=nil }
  MessagetextWideChar := nil;
  SourceWideChar := nil;
  DestWideChar := nil;

  try
    GetMem(MessagetextWideChar, Length(Msg)*SizeOf(WideChar)+
           1);
    GetMem(DestWideChar, 20*SizeOf(WideChar)+1);
    StringToWideChar(Msg, MessagetextWideChar, Length(Msg)*SizeOf(WideChar)+
                     1);
    StringToWideChar(Dest, DestWideChar, 20*SizeOf(WideChar)+
                     1);
    if Source='' then
      Result := NetMessageBufferSend(nil, DestWideChar, nil, MessagetextWideChar,
                                     Length(Msg)*SizeOf(WideChar)+
                                     1)
    else
    begin
      GetMem(SourceWideChar, 20*SizeOf(WideChar)+1);
      StringToWideChar(Source, SourceWideChar, 20*SizeOf(WideChar)+
                       1);
      Result := NetMessageBufferSend(nil, DestWideChar, SourceWideChar,
                                     MessagetextWideChar, Length(Msg)*SizeOf(WideChar)
                                     +1);
      FreeMem(SourceWideChar);
    end; { not (Source='') }

  finally
    FreeMem(MessagetextWideChar);
    FreeLibrary(Handle);
  end; { try }
end; { NetSend }


B3层 发表时间: 06/05 08:43

回复: fora [fora]   论坛用户   登录
至于对一个工作组群发,是我当初脑子不好。

完全可以先获取工作组甚至局域网中的全部机器,再一个一个的发。

chat* ben fora

B4层 发表时间: 06/05 08:58

论坛: 原创软件

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号