查看完整版本: 请高手们帮助修改代码

also4930 2008-5-24 13:46

请高手们帮助修改代码

我做的程序是一个虚拟服务器,使用VB.NET语言建立smtp虚拟服务器,采用WINSOCK编程技术,根据SMTP的基本命令与响应码,通过线程监听SMTP的端口25所发来的命令,模拟smtp的服务,向客户端回应相应的响应码,实时地、动态地对所在网络的SMTP数据流予以捕获和分析,在客户端发送邮件数据后截取从客户端发过来的邮件。
    程序通过telnet的测试,已经实现了对端口的监听,但telnet作为客户端发送命令服务器没有响应并给回应,请高手们帮忙修改一下,非常感谢!源代码在附件中已附上。
    [attach]237[/attach]

王懿 2008-5-24 14:07

VB.NET语言没学过__a7
也没安装程序。

替身 2008-5-25 00:13

呵呵 帮你顶一下  期待这方面的高手

blastar 2008-5-25 14:18

代码错误

Private Sub cServer_DataReceived(ByVal sender As UserConnection, ByVal Data As String) Handles cServer.DataReceived
        Dim aSMTPSTRUCT As SMTPClient = sender.sExtraValues
        Dim aSMTPResponse As SMTPResponseCodes
        Dim sSMTPResponse As String
        Dim sSMTPCommand As String
        Dim sSMTPParam As String
        aSMTPSTRUCT.AllowAction = True
        RaiseEvent DataReceived(sender, Data)
        aSMTPSTRUCT.CurrentCommand = sSMTPCommand
        aSMTPSTRUCT.CommandParams = sSMTPParam
        RaiseEvent ClientAction(sender, aSMTPSTRUCT)
        sender.sExtraValues = aSMTPSTRUCT
        Select Case UCase(aSMTPSTRUCT.CurrentCommand)
            Case "HELO" '客户端登陆 不下去
                RaiseEvent ClientLogin(sender, aSMTPSTRUCT)
                If aSMTPSTRUCT.Authenticated = True Then
                    'sender.sExtraValues = aSMTPSTRUCT
                    SendSMTPResponse(sender, aSMTPResponse.msgPortSuccess)
                End If
            Case Is = "MAIL FROM"
                SendSMTPResponse(sender, aSMTPResponse.msgTypeOk)
            Case Is = "RCPT TO"
                SendSMTPResponse(sender, aSMTPResponse.msgNoopOk)
            Case Is = "DATA"
                SendSMTPResponse(sender, aSMTPResponse.msgAborOk)
                '??????循环接收
            Case Is = ".<CrLf>"
                SendSMTPResponse(sender, aSMTPResponse.msgStruOk)
            Case Is = "QUIT" 'they want to end this session

                RaiseEvent ClientLogout(sender, aSMTPSTRUCT)
                SendSMTPResponse(sender, aSMTPResponse.msgQuit)
                'SendSMTPResponse(sender, sSMTPResponse) 'send the response NOW
                sender.CloseClientConenction()
                Exit Sub
        End Select
        sender.sExtraValues = aSMTPSTRUCT
        SendSMTPResponse(sender, sSMTPResponse)
    End Sub

测试了你的程序,telnet可以连接,服务端可以接收到数据但是,你上面的这个接受到数据的程序有错。接收到的字符串是data,你赋值给SMTPSTRUCT的字符串只是一个未赋值的字符串而已。

blastar 2008-5-25 14:40

Data 里面包含 Command 和 Params两部分,你应该先对接收到的字符串进行处理,然后再对SMTPSTRUCT结构赋值。
注意,客户端发送过来的字符串都是以vbCRLF结尾的。

王懿 2008-5-25 21:03

__a1
页: [1]
查看完整版本: 请高手们帮助修改代码