CSDN博客

img uuty

8月24日,,终于有了net send

发表于2004/9/19 19:34:00  1091人阅读

今在 电脑编程技巧与维护上看到了那个自己编程写局域网发信息的文章,,就是实现net send 的功能,,主要的部分就是用了 netApi32.dll 中的 NetMessAgeBufferSend()函数,,想到自己上学期一直想编个net send的程序,,现在终于有盼头了 呵呵,,
采用倒叙的方式,,先把写好的程序贴着,,然后慢慢分析
#include <stdio.h>
#include <windows.h>
#include <lm.h>

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


//#define UNICODE
#define MAXLEN 256

int main(int Argc,char *Argv[])
{
 //WSADATA WSADAtA;
 //WSAStartup(MAKEWORD(2,2),&WSADAtA);
 DWORD rc;
 int i=1;
 wchar_t server[MAXLEN],ToNAme[MAXLEN],msg[MAXLEN];
 if(Argc!=4&&Argc!=5){
  printf("/nusAge:netsend ////servernAme ToUserNAme /"messAge/"/n");
  return 1;
 }
 mbstowcs(server,Argv[1],MAXLEN);
 server[MAXLEN-1]=L'/0';
 mbstowcs(ToNAme,Argv[2],MAXLEN);
 ToNAme[MAXLEN-1]=L'/0';
 mbstowcs(msg,Argv[3],MAXLEN);
 msg[MAXLEN-1]=L'/0';
 if(Argc==5) i=atoi(Argv[4]);

 printf("/n Here we go...../n");
 while(i--){
  rc = NetMessageBufferSend(server,ToNAme,NULL,msg,MAXLEN);
 }
 if(rc!=NERR_Success)
 {
  printf("NMBS() returned %lu/n",rc);
  return 1;
 }
 printf("/n Done./n");
 return 0;

}


好,,来谈谈最郁闷的,,看NetMessAgeBufferSend()的msdn里资料,说是要用头文件lmmsg.h  加了这个后,,就是3个错误,,都出在lmmsg.h里,,调了很久,后来把所有的代码都注释掉了 还是那3个错误,,看来不是我的问题了,,后来在网上翻到一篇用那个函数的程序,,看到他用的头文件是lm.h。我学,,那3个错误没有了,,可msdn里介绍的用法
#define UNICODE
   #define MESGLEN 50
   WCHAR awcToName[] = TEXT("DomainName*");
   WCHAR awcFromName[] = Text("MyComputer");
   WCHAR awcMesgBuffer[MESGLEN] = Text("This ia Test Message");
   NET_API_STATUS nasStatus;

   nasStatus = NetMessageBufferSend(NULL,
                                    awcToName,
                                    awcFromName,
                                    awcMesgBuffer,
                                    MESGLEN);
却出错,,类型不匹配,, 难道不能用WCHAR吗?
WINNT.H

#ifndef _MAC
typedef wchar_t WCHAR;    // wc,   16-bit UNICODE character
#else
// some Macintosh compilers don't define wchar_t in a convenient location, or define it as a char
typedef unsigned short WCHAR;    // wc,   16-bit UNICODE character
#endif
//---------------------------------------------------------
STDIO.H

#ifndef _MAC
#ifndef _WCHAR_T_DEFINED
typedef unsigned short wchar_t;
#define _WCHAR_T_DEFINED
#endif

看样子 wchar_t 应该和 WCHAR 是一样的
后来我试了,,两种都没没问题,,那我以前?? 奇怪了


mbstowcs() 是将ASCII字符转化成UNICODE字符的函数,,
mbstowcs(server,Argv[1],MAXLEN);
server[MAXLEN-1]=L'/0'; -->这句一直不明白为什么要这样,,'/0'不能用mbstowcs()转化吗?

net send 命令只需要给出要发送的主机名或ip,不需要指出要发送到的主机上的用户名,,而netmessAgebuffersend则必须指出,,而且自己的用户名也必须指定,,而且要是个确实存在的用户,为NULL时,发送当前的用户名..


其实这个程序完全是我照抄的了,,而且还有一部分没懂,网上那份程序我也付在附件里,,下一步要做的是用NetMessAeNameEnum() 列举机器上的用户,,然后向那台机子上的所有用户都发,,,再下一步 我想用封包技术直接模拟net send  这在猪海时我已经试过,,可惜半途卡住了  :(

0 0

相关博文

我的热门文章

img
取 消
img