小弟刚开始学VB,写了个探测局域网445端口的工具
代码如下:
Private Sub Command1_Click()
Dim y As String
Dim x As String
Dim z1 As String
Dim z2 As String
Dim z3 As String
Dim z4 As String
Dim z As Integer
Dim z0 As Integer
y = Winsock1.LocalIP
x = "."
z = InStrRev(y, x)
z1 = Left(y, z)
z2 = Mid(y, z + 1)
z0 = Val(z2)
Command1.Enabled = False
Dim i As Integer
For i = 1 To 254
If i <> z0 Then
z3 = CStr(i)
z4 = z1 & z3
Text2.Text = z4
Winsock1.Close
DoEvents
Winsock1.RemoteHost = z4
Winsock1.RemotePort = 445
DoEvents
Winsock1.Connect
DoEvents
Pause (10)
If Winsock1.State = 7 Then
Exit For
End If
End If
Next i
Command1.Enabled = True
End SubPrivate Sub Form_Load()
Text1.Text = Winsock1.LocalIP
End Sub
Private Sub Pause(ByVal sSec As Long)
Dim StartSec As Long
StartSec = GetTickCount()
While (GetTickCount() - StartSec) < sSec
DoEvents
Wend
End SubPrivate Sub Form_Unload(Cancel As Integer)
End
End SubPrivate Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
Winsock1.Close
End Sub
当在command1_click里将for语句范围改小,比如,已知目标机器192.168.1.100的445开放,
我将for设置为99 to 102的时候,运行的时候基本没有问题。
但是当我将for重新改为1 to 254的时候,却扫不出任何开放的机器。
在程序扫描的过程中,
发现text2.text里显示的当前扫描的ip跟使用cmd里的netstat里的当前连接根本就不一样。比如,当我的text2.text里显示的是192.168.1.80的时候,我查看系统里显示的是:
TCP 192.168.1.144:3146 192.168.1.11:445 SYN_SENT 848
TCP 192.168.1.144:3147 192.168.1.12:445 SYN_SENT 848
TCP 192.168.1.144:3148 192.168.1.13:445 SYN_SENT 848
TCP 192.168.1.144:3149 192.168.1.14:445 SYN_SENT 848
TCP 192.168.1.144:3150 192.168.1.15:445 SYN_SENT 848
TCP 192.168.1.144:3151 192.168.1.16:445 SYN_SENT 848
TCP 192.168.1.144:3152 192.168.1.17:445 SYN_SENT 848
TCP 192.168.1.144:3153 192.168.1.18:445 SYN_SENT 848
TCP 192.168.1.144:3154 192.168.1.19:445 SYN_SENT 848
TCP 192.168.1.144:3155 192.168.1.20:445 SYN_SENT 848
不停的使用netstat查看的时候,会发现
目的ip在缓慢的增加,而且基本上10个地址段的变化
当我的程序已经把1 to 254 扫完了,
在系统中显示的才连接到了192.168.1.30左右。
我的环境是 xpsp2 + vb6sp6这个问题很奇怪啊。我在for里面已经把winsock关闭了,winsock关闭之后难道系统怎么还在发以前的SYN_SENT
另外还有个更加奇怪的是
当我第一次使用小范围扫描到目的主机之后,然后再使用小范围扫描时,
同样无法扫到目标主机
而且在xp系统里显示的更加奇怪(目标主机ip为100,for i=95 to 105)
TCP 192.168.1.144:3428 192.168.1.95:445 SYN_SENT 848
TCP 192.168.1.144:3429 192.168.1.96:445 SYN_SENT 848
TCP 192.168.1.144:3430 192.168.1.97:445 SYN_SENT 848
TCP 192.168.1.144:3431 192.168.1.98:445 SYN_SENT 848
TCP 192.168.1.144:3432 192.168.1.99:445 SYN_SENT 848
TCP 192.168.1.144:3434 192.168.1.101:445 SYN_SENT 848
TCP 192.168.1.144:3435 192.168.1.102:445 SYN_SENT 848
会发现本地机器不连接100这个ip了,而且在本地端口居然跳过了3433这个端口进行连接,3433这个端口肯定是可用的。
这个问题到底是出在我这边的系统还是出在445服务器拒绝了连接?高手请教了,实在是想不明白了,不知道到底是我的代码有问题,还是是xpsp2的问题。
代码如下:
Private Sub Command1_Click()
Dim y As String
Dim x As String
Dim z1 As String
Dim z2 As String
Dim z3 As String
Dim z4 As String
Dim z As Integer
Dim z0 As Integer
y = Winsock1.LocalIP
x = "."
z = InStrRev(y, x)
z1 = Left(y, z)
z2 = Mid(y, z + 1)
z0 = Val(z2)
Command1.Enabled = False
Dim i As Integer
For i = 1 To 254
If i <> z0 Then
z3 = CStr(i)
z4 = z1 & z3
Text2.Text = z4
Winsock1.Close
DoEvents
Winsock1.RemoteHost = z4
Winsock1.RemotePort = 445
DoEvents
Winsock1.Connect
DoEvents
Pause (10)
If Winsock1.State = 7 Then
Exit For
End If
End If
Next i
Command1.Enabled = True
End SubPrivate Sub Form_Load()
Text1.Text = Winsock1.LocalIP
End Sub
Private Sub Pause(ByVal sSec As Long)
Dim StartSec As Long
StartSec = GetTickCount()
While (GetTickCount() - StartSec) < sSec
DoEvents
Wend
End SubPrivate Sub Form_Unload(Cancel As Integer)
End
End SubPrivate Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
Winsock1.Close
End Sub
当在command1_click里将for语句范围改小,比如,已知目标机器192.168.1.100的445开放,
我将for设置为99 to 102的时候,运行的时候基本没有问题。
但是当我将for重新改为1 to 254的时候,却扫不出任何开放的机器。
在程序扫描的过程中,
发现text2.text里显示的当前扫描的ip跟使用cmd里的netstat里的当前连接根本就不一样。比如,当我的text2.text里显示的是192.168.1.80的时候,我查看系统里显示的是:
TCP 192.168.1.144:3146 192.168.1.11:445 SYN_SENT 848
TCP 192.168.1.144:3147 192.168.1.12:445 SYN_SENT 848
TCP 192.168.1.144:3148 192.168.1.13:445 SYN_SENT 848
TCP 192.168.1.144:3149 192.168.1.14:445 SYN_SENT 848
TCP 192.168.1.144:3150 192.168.1.15:445 SYN_SENT 848
TCP 192.168.1.144:3151 192.168.1.16:445 SYN_SENT 848
TCP 192.168.1.144:3152 192.168.1.17:445 SYN_SENT 848
TCP 192.168.1.144:3153 192.168.1.18:445 SYN_SENT 848
TCP 192.168.1.144:3154 192.168.1.19:445 SYN_SENT 848
TCP 192.168.1.144:3155 192.168.1.20:445 SYN_SENT 848
不停的使用netstat查看的时候,会发现
目的ip在缓慢的增加,而且基本上10个地址段的变化
当我的程序已经把1 to 254 扫完了,
在系统中显示的才连接到了192.168.1.30左右。
我的环境是 xpsp2 + vb6sp6这个问题很奇怪啊。我在for里面已经把winsock关闭了,winsock关闭之后难道系统怎么还在发以前的SYN_SENT
另外还有个更加奇怪的是
当我第一次使用小范围扫描到目的主机之后,然后再使用小范围扫描时,
同样无法扫到目标主机
而且在xp系统里显示的更加奇怪(目标主机ip为100,for i=95 to 105)
TCP 192.168.1.144:3428 192.168.1.95:445 SYN_SENT 848
TCP 192.168.1.144:3429 192.168.1.96:445 SYN_SENT 848
TCP 192.168.1.144:3430 192.168.1.97:445 SYN_SENT 848
TCP 192.168.1.144:3431 192.168.1.98:445 SYN_SENT 848
TCP 192.168.1.144:3432 192.168.1.99:445 SYN_SENT 848
TCP 192.168.1.144:3434 192.168.1.101:445 SYN_SENT 848
TCP 192.168.1.144:3435 192.168.1.102:445 SYN_SENT 848
会发现本地机器不连接100这个ip了,而且在本地端口居然跳过了3433这个端口进行连接,3433这个端口肯定是可用的。
这个问题到底是出在我这边的系统还是出在445服务器拒绝了连接?高手请教了,实在是想不明白了,不知道到底是我的代码有问题,还是是xpsp2的问题。
解决方案 »
- 请教高手DataReport报表设置问题
- 有关Image控件显示图片的问题,万分感谢
- 判断一个文件夹是否存在,如果不存在则创建,以下的效率高么????????
- 请问如何有选择的启动机器上的AutoCAD的不同版本(在线等待)
- 这是怎么回事呀!
- VB+Access做的应用程序,可不可以在没有装Access的电脑上正常运行
- 哪为仁兄知道水晶报表8。0的安装cd key code??
- 文本文件的处理
- 有那位朋友能浪费一点点时间吗?
- COPY多个文件用什么?哪位给个copyfile的例子看看????
- 我用winsock1.bind时老出错.如何知道端口是否被占用呢?
- 请问VB如何连接SQLserver?
Private Sub Command1_Click()
.....
Command1.Enabled = True
Winsock1.Close '加这一句End Sub
还有你的网络速度可能不怎么快,你试试把Pause的时间增长一点儿
Command1.Enabled = True
Winsock1.Close '加这一句我觉得没必要,因为,在winsock进行连接之前,我都close了的。
再者,pause我也改过了,最大我改到了1000,也就是1秒,但是问题依旧。刚刚我找了个2K的机器,
居然在2K上面没有问题,(pause改到了10,然后可以反复不停的扫描,也没有问题)
但是在xp下问题依旧。。大虾们,在XP下怎么会这样??
谁能给我个解释,或者给个在xp下的解决方案?