在 WTL 中发送匿名 net send 消息






4.32/5 (24投票s)
2003年6月27日
5分钟阅读

319432

6929
本文介绍如何向任何主机发送匿名 net send 消息。
引言
本文解释了如何在网络上发送匿名的 net send 消息。我的意图不是解释如何发送垃圾匿名消息来骚扰他人。目的是解释这项技术如何能为定制应用程序提供帮助。
对于初学者,我先解释一下 net send 工具是什么?什么是 net 消息以及它是如何工作的?
什么是 net send、net 消息以及它们如何工作?
Net send 用于向网络上(局域网或互联网)运行 messenger 服务的任何主机发送消息。此外,在本地计算机上还应启用 workstation 服务。在命令提示符或运行中输入此命令并按 Enter 键。
Net send IPAddress 你的消息
这将向该特定用户发送一条消息,如果他的 messenger 服务正在运行,他的屏幕上就会弹出一个对话框。您也可以使用该计算机的主机名或任何“消息别名”。什么?什么是消息别名?在 Windows 2000 及更高版本中,messenger 服务在称为消息名称表(message name table)的表中维护消息别名的列表。消息别名就是一个名称或任何字符串。默认情况下,计算机名和当前会话名会添加到此别名表中。但是,您可以通过使用此命令将其注册到别名表中来添加自己的消息别名。
Net Name 新消息别名
Messenger 服务会接收其收件人属于它维护的别名表的所有消息。所以,如果网络上的其他用户键入“net send 新消息别名 消息”,它就会被发送到包含此消息别名的主机。您可以使用以下命令检索已注册的消息别名列表。
Net Name
下图显示了 net send 弹出对话框。我希望这些信息足以理解 net send 和 net 消息。

那么如何发送匿名 net send 消息?
现在您已经理解了 net send 的工作原理,让我们回到原来的主题。
您是否遇到过匿名的 net send 消息?当您收到 net send 消息时,通常会在其中提到发送者的主机名。然而,发送者的名称不一定总是发送者的主机名;它可以是使用本文提供的技术创建的任何名称。但是,如果您使用 net send 工具发送此消息,那么它始终是发送者的主机名。请注意,在 net send 对话框中显示的名称不是发送者的消息别名。发送匿名 net send 消息非常简单。
发送匿名消息给某些用户有时可能很有趣,但有时也会给其他用户带来麻烦。然而,如果您的应用程序使用自定义名称向每个主机发送消息,那么它可能会很有用。所以,它的用途取决于您的需求。
Net Send 工具使用 Microsoft LAN Manager 提供的 API。要发送消息,您需要将消息别名注册到消息名称表中。这可以通过 NetMessageNameAdd
函数完成。只有本地管理员组的成员才能执行此函数。如前所述,计算机的主机名默认会添加到消息别名表中,因此您甚至可以在不注册新别名的情况下发送消息。但我这样做是为了解释整个过程。然而,这并不是使匿名 net send 成为可能的真正原因。一旦您将任何消息别名注册到消息名称表中,您就可以使用 NetMessageBufferSend
函数将弹出消息发送到任何主机。
本文提供的示例应用程序是一个基于对话框的 WTL 应用程序,可以同时向许多主机发送匿名消息。使用此工具,您甚至可以向一千多个主机发送消息。您需要在名为 checkhost.txt 的文件中提供 IP 地址列表。该程序期望此文本文件中的每一行包含一个 IP 地址。有关更多信息,您可以打开示例随附的文件进行查看。NetMessageBufferSend 接受 5 个参数。第一个是服务器名,如果为 NULL 则为本地主机;第二个是您创建的消息别名;第三个是发送者的姓名(您是否知道它是如何工作的?);第四个是指向消息本身的指针;最后一个是消息的大小。因此,正是此函数的“from”字段使得这一切成为可能。它可以是任何匿名名称。以下代码演示了如何发送此消息。
USES_CONVERSION: NetMessageNameAdd(NULL,A2W("RECTOR")); // we have added a message alias of RECTOR NetMessageBufferSend( NULL, server, from, (byte *) &msg,wcslen( msg ) * 2 ); NetMessageNameDel(NULL,A2W("RECTOR")); // "server" is a Unicode string containing IP Address // whom you want to send // "from" is the actual field which makes it all happen. //It is Unicode string and it contains the name from // which this message is coming from. So you can specify // any anonymous name and it will appear on receiver end // we are multiplying the length of message by 2 //because it is a Unicode string which //corresponds to 2 Bytes for a single character
这不是从示例应用程序中获取的实际代码。这只是为了演示整个过程。
在示例应用程序中,单击广播按钮后,我首先从编辑框中检索文本,并使用 mbstowcs
函数将 char 字符串转换为 unicode 字符字符串(这些网络函数需要 unicode 字符串)。然后我进入循环,为我想发送的每条消息创建一个线程。在线程中,我使用 NetMessageBufferSend
函数发送消息。就是这样:)。
要向您自己的主机发送消息,您需要更改 checkhosts.txt 文件,删除我添加的 IP 地址,并添加您想要发送消息的主机名或 IP 地址。
希望您喜欢这篇短文 :)
更新(2003 年 6 月 29 日)
- 增加了关于 net send 和 net 消息工作原理的更多解释。
- 增加了关于示例代码的解释。