网页端口扫描-vb编写内网端口扫描

hacker|
246

请教VB高手一个局干网端口数的问题

一般设为0,当然可以随便,不过最好大于1024,因为以下的通常系统保留的。范围是0--65535.

求助高手vb6.0用winsock的TCP/UDP进行端口扫描和一对多通讯的问题怎么解决

Private Sub Form_Load()

'将 LocalPort 属性设置为一个整数。然后调用 Listen 方法。

tcpServer.LocalPort = 1001

tcpServer.Listen

frmClient.Show '显示客户端的窗体。

End Sub

Private Sub tcpServer_ConnectionRequest _

(ByVal requestID As Long)

'检查控件的 State 属性是否为关闭的。如果不是,在接受新的连接之前先关闭此连接。

If tcpServer.State sckClosed Then

tcpServer.Close

End If

'接受具有 requestID 参数的连接。

tcpServer.Accept requestID

End Sub

Private Sub txtSendData_Change()

'名为 txtSendData 的 TextBox 控件中

'包含了要发送的数据。当用户往文本框中键入数据时,使用 SendData 方法发送输入的字符串。

tcpServer.SendData txtSendData.Text

End Sub

Private Sub tcpServer_DataArrival _

(ByVal bytesTotal As Long)

'为进入的数据声明一个变量。

'调用 GetData 方法,并将数据赋予名为 txtOutput的 TextBox 的 Text 属性。

Dim strData As String

tcpServer.GetData strData

txtOutPut.Text = strData

End Sub

frmClient:

Private Sub Form_Load()

'Winsock 控件的名字为 tcpClient。

'注意:要指定远程主机,可以使用

' IP 地址(例如:"121.111.1.1"),也可以使用

'计算机的“好听的名字”如下所示。

tcpClient.RemoteHost = "127.0.0.1"

tcpClient.RemotePort = 1001

End Sub

Private Sub cmdConnect_Click()

'调用 Connect 方法,初始化连接。

tcpClient.Connect

End Sub

Private Sub txtSend_Change()

tcpClient.SendData txtSend.Text

End Sub

Private Sub tcpClient_DataArrival _

(ByVal bytesTotal As Long)

Dim strData As String

tcpClient.GetData strData

txtOutPut.Text = strData

End Sub

用VB写端口映射代码 越简单越好

Option Explicit

Dim bMsg() As Byte

Private Sub Form_Load()

Dim strCTemp As String

Dim intCPTemp As Variant

'侦听端口

Winsock1.LocalPort = 2000

Winsock1.Listen

'向Sphere转发数据

Winsock2.RemoteHost = "127.0.0.1"

Winsock2.RemotePort = 2001

Winsock2.Connect

Do While Winsock2.State 7

If Winsock2.State = 9 Or Winsock2.State = 0 Then Winsock2.Close: Exit Do

Select Case Winsock2.State

Case 1

strCTemp = "已打开!"

Case 2

strCTemp = "正在侦听.."

Case 3

strCTemp = "与服务器连接挂起!"

Case 4

strCTemp = "正在识别主机.."

Case 5

strCTemp = "已识别主机!"

Case 6

strCTemp = "正在与服务器连接.."

Case 8

strCTemp = "同级人员正在关闭连接.."

Case 9

strCTemp = "出错"

Winsock2.Close

End Select

If Winsock2.State intCPTemp Then

intCPTemp = Winsock2.State vbCrLf

Text1.Text = Text1.Text strCTemp vbCrLf

End If

DoEvents

Loop

If Winsock2.State = 7 Then

Text1.Text = Text1.Text strCTemp "已成功连接上服务器..." vbCrLf

End If

End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)

If Winsock1.State sckClosed Then Winsock1.Close

Winsock1.Accept requestID

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

ReDim bMsg(bytesTotal)

Winsock1.GetData bMsg

Text1.Text = Text1.Text bytesTotal vbCrLf

Text1.SelStart = Len(Text1.Text)

Winsock2.SendData bMsg

End Sub

Private Sub Winsock2_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)

Text1.Text = Text1.Text "Winsock2出错!" vbCrLf

End Sub

Private Sub Winsock2_SendComplete()

Text1.Text = Text1.Text "向Sphere发送了数据.." vbCrLf

End Sub

Private Sub Winsock2_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)

Text1.Text = Text1.Text "向Sphere发送了" bytesSent "数据.." vbCrLf

End Sub

VB6.0 扫描端口

计算机网络技术的日益发展和普及,为信息共享提供了一条全球性的高速通道,但目前采用的TCP/IP协议族潜在着安全漏洞,其安全机制并不健全,如何保护企业内部网络中的资源及信息不受外部攻击者肆意破坏或盗窃,是企业网络安全需要解决的重要问题。当我们担心被黑客攻击或怀疑电脑被植入木马时,我们往往求助于防火墙,本系统即通过实时监控全部TCP连接的方法来实现防黑客攻击。同时网络管理人员在整个网络运行期间,能否实时监控联网计算机的运行状态和操作对网络安全具有极其重要的作用.下面就以Visual Basic 6.0作为开发工具讲述两个主要模块的设计和实现。

系统概述

该系统由两个子系统组成:服务器端系统和客户端(工作站)系统。服务器端系统安装在网络管理人员的计算机上,用于实施各种对联网计算机的监控操作;客户端系统安装在每台联网的计算机上,它运行后以图标的方式出现在系统任务栏的提示区中,不影响工作站的其他操作,只用于响应服务器端的监控命令,并根据服务的需要,及时采样工作站的相应数据返回给服务器端。该系统的运行环境可以运行于Win98、Win95或WinNT、Win2000下。在系统的开发中,引入了WINSOCK通讯控件,除此之外,为较好地实现各项监控操作,还用到了几个API函数。

系统功能

1、监控全部TCP连接:实时监控所有服务器端口的连接情况、及时对异常连接发出警告并提示用户删除异常连接;

2、屏幕监控:该功能允许服务器随时把被监控工作站的屏幕画面抓取到服务器中,网络管理人员对相应工作站所进行的操作一目了然,若发现有非法操作即可采取发送警告或强制措施,强迫其停止相应操作;

3、对工作站进行锁机、关机、限制鼠标活动等;

4、服务器和工作站之间的信息互送。

功能的实现

1、监控全部TCP连接

TCP/IP(Transmission Control Protocol/Internet Protocol:传输控制协议/互联网协议)是一个包括TCP、IP、 UDP、ARP、RARP和ICMP等在内的网络协议集。TCP/IP经常被称为“将Internet绑定在一起的粘合剂”,它允许在空间上分离的多个信息网络连接在一起形成一个巨大的虚拟网络。TCP和UDP(用户数据报协议)是两个最常用的数据传输协议,它们都使用设置监听端口的方法来完成数据传输。

在本文中讨论TCP连接。通过使用TCP, Internet客户机可以打开到另一个Internet客户机的虚拟连接并传送数据流。与UDP不同,TCP协议通过重传丢失的数据报保证传输的可靠性。它也保证在接收端的应用程序按发送的顺序将接收到的位和字节重新组装起来以获取完整的数据。

要获得与服务器系统中全部有效的TCP连接,用到GetTcpTable这个API函数,它定义如下:

Private Declare Function GetTcpTable Lib "iphlpapi.

dll" (ByRef pTcpTable As MIB_TCPTABLE, ByRef

pdwSize As Long, ByVal bOrder As Long) As Long

其中参数pPcpTable是已生成的 TCP连接表缓冲区的指针,参数pdwsize是缓冲区大小(当缓冲区不够大时,该参数返回实际需要的大小),参数bOrder指示连接表是否需要按“Local IP”、“Localport”、“Remote IP”、“Remote port”依次进行排序,1为按此顺序。

通过一个TIMEER控件的TIMER的事件来比较前后两个TCP连接表,我们可以立即发现异常并发出警告。本系统用声音和报警标志提醒用户注意可能的外界入侵。收到警告信号后,我们应首先将可疑连接删除掉,SetTcpEntry函数可以帮助我们删除可疑连接。其定义为:

Private Declare Function SetTcpEntry Lib "iphlpapi.

dll" (ByRef pTcpTable As MIB_TCPROW) As Long

其中参数pTcptable为指向tcp表行的指针。然后将欲删连接的状态置为MIB_TCP_STATE_DELETE_TCB(值为12)即可删除该连接。

TIMER事件源代码:

Private Sub Timer1_Timer()

Dim Return1 As Long, i As Long

Dim Tmp1 As Long, Tmp2 As Long

Dim Ip_Buf(1 To 4) As Byte

Dim Win_Path As String, Tmp3 As String

Return1 = GetTcpTable(TCP1, Len(TCP1), 1)

If Last_Num_Of_Entries 0 And _

Last_Num_Of_Entries TCP1.dwNum_Of_Entries Then

'异常时发出警告

Picture1.Visible = True '警告标志

On Error Resume Next

Win_Path = String(145, 0)

'利用API函数GetWindowsDirectory获得当前系统目录

i = GetWindowsDirectory(Win_Path, 145)

Win_Path = Left(Win_Path, i)

'利用API函数sndPlaySound发出报警声音

i = sndPlaySound(Win_Path + "\Media\Ding.wav", H1)

On Error GoTo 0

Else

If Picture1.Visible = True Then

Picture1.Visible = False

End If

End If

Last_Num_Of_Entries = TCP1.dwNum_Of_Entries

Select Case Return1

Case 0:

Text1 = "": Combo1.Clear

For i = 0 To TCP1.dwNum_Of_Entries - 1

Tmp3 = Str(i + 1) + " "

Select Case TCP1.TCP_Table(i).dwState

' 显示连接状态

Case 1: Tmp3 = Tmp3 + "CLOSED"

Case 2: Tmp3 = Tmp3 + "LISTENING"

Case 3: Tmp3 = Tmp3 + "SYN_SENT"

Case 4: Tmp3 = Tmp3 + "SYN_RCVD"

Case 5: Tmp3 = Tmp3 + "ESTABLISHED"

Case 6: Tmp3 = Tmp3 + "FIN_WAIT1"

Case 7: Tmp3 = Tmp3 + "FIN_WAIT2"

Case 8: Tmp3 = Tmp3 + "CLOSE_WAIT"

Case 9: Tmp3 = Tmp3 + "CLOSING"

Case 10: Tmp3 = Tmp3 + "LAST_ACK"

Case 11: Tmp3 = Tmp3 + "TIME_WAIT"

Case 12: Tmp3 = Tmp3 + "DELETE_TCB"

End Select

Combo1.AddItem Tmp3 ' 填充列表以供用户删除

' 本地IP

Tmp3 = Tmp3 + ":" + vbCrLf + vbTab + "Local: "

'CopyMemory为API函数

CopyMemory Ip_Buf(1), TCP1.TCP_Table(i).dwLocalAddr, 4

Tmp3 = Tmp3 + CStr(Ip_Buf(1)) + "." + _

CStr(Ip_Buf(2)) + "."+ CStr(Ip_Buf(3)) _

+"." + CStr(Ip_Buf(4))

Tmp1 = TCP1.TCP_Table(i).dwLocalPort

' 本地端口

Tmp2 = Tmp1 / 256 + (Tmp1 Mod 256) * 256

' 远程IP

Tmp3 = Tmp3 + ":" + Str(Tmp2) + vbTab + "Remote: "

CopyMemory Ip_Buf(1), TCP1.TCP_Table(i).dwRemoteAddr, 4

Tmp3 = Tmp3 + CStr(Ip_Buf(1)) + "." + CStr(Ip_Buf(2)) _

+ "."+ CStr(Ip_Buf(3)) + "." + CStr(Ip_Buf(4))

' 远程端口

Tmp1 = TCP1.TCP_Table(i).dwRemotePort

Tmp2 = Tmp1 / 256 + (Tmp1 Mod 256) * 256

Tmp3 = Tmp3 + ":" + Str(Tmp2) + vbCrLf

Text1 = Text1 + Tmp3

Next i

Case 50:

MsgBox "系统不支持该API函数": End

Case 87:

MsgBox "无效的参数": End

Case 111:

MsgBox "缓冲区溢出": End

Case 232:

MsgBox "无数据": End

End Select

End Sub

用于删除连接的CLICK事件源代码:

Private Sub delete_Click()

Dim Return1 As Long

If Combo1.ListIndex 0 Then Exit Sub

' 将欲删连接的状态置为值为12

TCP1.TCP_Table(Combo1.ListIndex).dwState = 12

' 执行删除

Return1 = SetTcpEntry(TCP1.TCP_Table(Combo1.ListIndex))

If Return1 = 0 Then

MsgBox "删除成功"

Else

MsgBox "删除失败"

End If

Timer1_Timer

End Sub

2、屏幕监控

当服务器系统发现TCP异常连接时,可通过屏幕监控功能将局域网中被监控工作站的屏幕画面抓取到服务器中并实施相应措施,如对工作站锁机或关机等。此处用到WINSOCK控件,其通讯原理请参阅相关资料,屏幕监控功能用到TCP协议,为了达到更好的效果,可在窗体中加入TIMER控件,设定TIMER事件。

(1) 工作站端

侦听并响应服务器端发出的连接请求和屏幕抓取。其中屏幕抓取功能可通过API函数实现:

Dim a As String

Winsock1.GetData a, vbString

Select Case a

Case "zp"

Picture1.AutoRedraw = True

Picture1.ScaleMode = 1

lDesktop = GetDesktopWindow()

lDC = GetDC(lDesktop)

BitBlt Picture1.hdc, 0, 0, Screen.Width, _

Screen.Height, lDC,0, 0, vbSrcCopy

'获取图像数组

SavePicture Picture1.Image, filename

Winsock1.SendData "okm"

Dim myfile() As Byte

Case "fir" '传第一块图

Open filename For Binary As #1

filelen = LOF(1)

ReDim myfile(1 To blocksize) As Byte

'(const blocksize=3072)

Get #1, , myfile

Winsock1.SendData myfile

curpos = blocksize

Case "next" ‘传其它块

If curpos = filelen Then

Winsock1.SendData "end"

Close #1

Exit Sub

End If

j = curpos + blocksize

If j filelen Then

j = filelen - curpos

Else

j = blocksize

End If

ReDim myfile(1 To j) As Byte

Get #1, , myfile

Winsock1.SendData myfile

curpos = curpos + j

End Select

注意:以上功能在WINSOCK的DataArrival事件中实现。抓取的图象数据量较大,所以需要分块传输。

(2) 服务器端

DataArrival 事件代码:

Dim receivefile() As Byte

ReDim receivefile(bytesTotal) As Byte

Winsock1.GetData receivefile, vbArray + vbByte

'告诉Winsock控件收到的是字节数组类型的数据

If Chr(receivefile(0)) = "o" And _

Chr(receivefile(1)) = "k" And _

Chr(receivefile(2)) = "m" Then

If Dir$(filename) "" Then Kill filename

' 打开文件,准备存储图像

Open filename For Binary As #1

filelen = 0

Winsock1.SendData "fir"

Exit Sub

End If

If Chr(receivefile(0)) = "e" And _

Chr(receivefile(1)) = "n" And _

Chr(receivefile(2)) = "d" Then

Label1.Caption = "end"

Close #1

Picture1.Picture = LoadPicture(filename) '显示图象

Exit Sub

End If

Put #1, , receivefile

Winsock1.SendData "next"

3、其它功能

主要用到一些API函数,如实现屏幕锁定和解锁操作可使用Enable Window,实现关机功能用ExitWindowsEx, 服务器和工作站之间的信息互送用到WINSOCK控件的UDP协议,具体用法请参阅有关资料。

结束语

通过在基本的网络监控系统增加入侵检测,就能够极大提高网络的整体安全性,使之更灵敏、更智能,大大降低入侵的成功率。

求IP端口扫描器的VB源码

'4个TEXTBOX控件,2个COMMANDBUTTON控件,一个WINSOCK控件

Dim portnum As Long

Dim start As String

Sub scanningports()

Dim porttwo As Long

portnum = Text1.Text

porttwo = Text2.Text

Command2.Enabled = True

On Error GoTo viriio

Do

portnum = portnum + 1

DoEvents

If start = True Then

'关闭当前WINSOCK

Winsock1.Close

'防止系统冻结

DoEvents

Winsock1.LocalPort = portnum

DoEvents

Text3.Text = portnum

Winsock1.Listen

DoEvents

Else

portnum = 0

Command1.Enabled = True

Text1.Locked = False

Text2.Locked = False

Exit Sub

End If

Winsock1.Close

DoEvents

Loop Until portnum = porttwo

portnum = 0

Command1.Enabled = True

logport.Text = logport.Text vbCrLf "Scanning Ports Done!" vbCrLf

Text1.Locked = False

Text2.Locked = False

viriio:

If Err.Number = 10048 Then

logport.Text = logport.Text vbCrLf "端口" Winsock1.LocalPort " 开启中"

Resume Next

End If

End Sub

Private Sub Command1_Click()

Command2.Enabled = True

If Text1.Text = "" Then

MsgBox "你必须指定开始端口号!"

Exit Sub

End If

If Text2.Text = "" Then

MsgBox "你必须指定一个结束端口号"

Exit Sub

End If

Text1.Locked = True

Text2.Locked = True

Command1.Enabled = False

Winsock1.Close

start = True

Call scanningports

logport.Text = logport.Text vbCrLf "端口" Text1.Text "- " Text3.Text " 已经成功扫描!"

End Sub

Private Sub Command2_Click()

Command2.Enabled = False

start = False

End Sub

VB高手进!!!

你想干什么?这都是黑手用的东西啊,查看本机及本机所连接的IP及端口可以用DOS输入:netstat -n 指令来查看。至于VB方法本人还不会。

0条大神的评论

发表评论