提问人:Axiden 提问时间:4/7/2023 最后编辑:Ken WhiteAxiden 更新时间:4/24/2023 访问量:78
验证 IP 地址,但遇到问题
Validate an IP Address and am having trouble
问:
我在验证 IP 地址时遇到问题。我试图通过将 IP 地址分解为 4 个段并分别验证每个段来验证它,尽管我不知道如何将其分解为段。
我已经把整个代码放在下面,我将把另一个代码块,只有与验证相关的内容,放在包含整个代码的代码块下面
Imports System.Text.RegularExpressions
Public Class Ticket_Request_Form
Dim myXMLFile = "Tickets.xml"
Public strName As String
Public strProblem As String
Public strDateProblemStarted As String
Public strProblemDescription As String
Public strTypeOfProblem As String
Public strIPAddress As String
Public intIPSegment1 As Integer
Public intIPSegment2 As Integer
Public intIPSegment3 As Integer
Public intIPSegment4 As Integer
Public blnAllInputsValid As Boolean = False
Private Sub Ticket_Request_Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
If My.Computer.FileSystem.FileExists(myXMLFile) = True Then
DsTickets.ReadXml(myXMLFile)
End If
End Sub
Private Sub TicketsBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles TicketsBindingNavigatorSaveItem.Click
DtabTicketsBindingSource.EndEdit()
Try
DsTickets.WriteXml(myXMLFile)
MessageBox.Show("Data Saved Successfully", "File Saved")
Catch ex As Exception
MessageBox.Show("Data Not Saved to Tickets.xml", "File Save Error")
End Try
strName = txtName.Text
strProblem = txtProblem.Text
strDateProblemStarted = txtDateProblemStarted.Text
strProblemDescription = txtProblemDescription.Text
strIPAddress = txtIPAddress.Text
blnAllInputsValid = False
ValidateUserInputs()
If blnAllInputsValid <> True Then
Exit Sub
End If
DtabTicketsBindingSource.EndEdit()
Try
DsTickets.WriteXml(myXMLFile)
MessageBox.Show("Data Saved Successfully", "File Saved")
Catch ex As Exception
MessageBox.Show("Data Not Saved to Tickets.xml", "File Save Error")
End Try
ValidateUserInputs()
If blnAllInputsValid <> True Then
Exit Sub
End If
DtabTicketsBindingSource.EndEdit()
Try
DsTickets.WriteXml(myXMLFile)
MessageBox.Show("Data Saved Successfully", "File Saved")
Catch ex As Exception
MessageBox.Show("Data Not Saved to ModLibrary.xml", "File Save Error")
End Try
End Sub
Private Sub BindingNavigatorDeleteItem_Click(sender As Object, e As EventArgs) Handles BindingNavigatorDeleteItem.Click
Dim confirm_msg As Integer
confirm_msg = MessageBox.Show("DELETE RECORD FOR " & txtProblem.Text & "?",
"Confirm Delete", MessageBoxButtons.YesNo,
MessageBoxIcon.Information)
If confirm_msg = vbYes Then
MessageBox.Show("Record Marked for Deletion." & vbCrLf _
& "Click the Save Icon to Save Changes" & vbCrLf _
& "and Permanently Delete the Record. ", "Delete in Progress")
Else
Me.Controls.Clear()
InitializeComponent()
Ticket_Request_Form_Load(e, e)
MessageBox.Show("Record Delete Cancelled." & vbCrLf _
& "File Returned to First Record.", "Delete Cancelled")
End If
End Sub
Public Sub ValidateUserInputs()
blnAllInputsValid = False
If strName.Length > 0 Then
Else
blnAllInputsValid = False
MessageBox.Show("Please enter your name into the Name Box.", "Input Error")
txtName.Focus()
Exit Sub
End If
If strProblem.Length > 0 Then
Else
blnAllInputsValid = False
MessageBox.Show("Please enter the problem your having into the Problem box.", "Input Error")
txtProblem.Focus()
Exit Sub
End If
If strProblemDescription.Length > 0 Then
Else
blnAllInputsValid = False
MessageBox.Show("Please describe the problem your having into the Problem Description box.", "Input Error")
txtProblem.Focus()
Exit Sub
End If
Dim strUserInputDateProblemStarted As String = txtDateProblemStarted.Text
Dim strInputDateProblemStartedName As String = "Creation Date"
Dim blnDateProblemStartedIsValid As Boolean = False
blnDateProblemStartedIsValid = ValidInputDateProblemStartedCheck(strUserInputDateProblemStarted, strInputDateProblemStartedName)
If blnDateProblemStartedIsValid = False Then
txtDateProblemStarted.Focus()
blnAllInputsValid = False
Exit Sub
End If
Dim CurrentDate As Date = Date.Now
CurrentDate = CurrentDate.ToShortDateString
If strDateProblemStarted > CurrentDate Then
MessageBox.Show("Date of Creation Error: " & strUserInputDateProblemStarted & "." & vbCrLf _
& "Date cannot be in the Future. " & vbCrLf _
& "Current Date Today is: " & CurrentDate & vbCrLf _
& "Re-enter the creation date. ", "Date Error")
txtDateProblemStarted.Focus()
blnAllInputsValid = False
Exit Sub
End If
Dim strUserInputIPAddress As String = txtIPAddress.Text
Dim strInputIPAddressName As String = "IP Address"
Dim blnIPAddressIsValid As Boolean = False
blnIPAddressIsValid = ValidInputIPAddressCheck(strUserInputIPAddress, strInputIPAddressName)
If blnIPAddressIsValid = False Then
txtIPAddress.Focus()
blnAllInputsValid = False
Exit Sub
End If
blnAllInputsValid = True
End Sub
Public Function ValidInputDateProblemStartedCheck(ByVal strIncomingDateProblemStarted As String, ByVal strIncomingName As String) As Boolean
If strIncomingDateProblemStarted = Nothing Then
MessageBox.Show("Please Enter " & strIncomingName, "Data Missing")
ValidInputDateProblemStartedCheck = False
Return ValidInputDateProblemStartedCheck
End If
Dim ValidDateProblemStartedFormat As New Regex("\d{2}-\d{2}-\d{4}")
If ValidDateProblemStartedFormat.IsMatch(strIncomingDateProblemStarted) Then
Else
MessageBox.Show("Invalid Date Format Detected for " & strIncomingName & "." _
& vbCrLf & "The date that the problem started should be 10 characters lond." _
& vbCrLf & "Date should use - as the seperator symbol." _
& vbCrLf & "Required Date Format is dd-mm-yyyy" _
& vbCrLf & "Enter Date like this: 10-07-2006.", "Date Problem Started Format Error")
ValidInputDateProblemStartedCheck = False
Return ValidInputDateProblemStartedCheck
End If
If IsDate(strIncomingDateProblemStarted) Then
Else
MessageBox.Show("Invalid Date Error: " & strIncomingName & "." & vbCrLf _
& "Date is not a Real Date." & vbCrLf _
& "Rejecter Date = " & strIncomingDateProblemStarted, "Date Error")
ValidInputDateProblemStartedCheck = False
Return ValidInputDateProblemStartedCheck
End If
ValidInputDateProblemStartedCheck = True
Return ValidInputDateProblemStartedCheck
End Function
Private Sub btnReviewTicket_Click(sender As Object, e As EventArgs) Handles btnReviewTicket.Click
txtReviewTicket.Text = "Hi " & txtName.Text & vbCrLf &
"Problem: " & txtProblem.Text & vbCrLf &
"Description: " & txtProblemDescription.Text & vbCrLf &
"The problem has been around since: " & txtDateProblemStarted.Text
End Sub
Private Sub imgOpen###########_Click(sender As Object, e As EventArgs) Handles imgOpen###########.Click
Process.Start("https://############################")
End Sub
Public Function ValidInputIPAddressCheck(ByVal strIncomingIPAddress As String, ByVal strIncomingName As String) As Boolean
If strIncomingIPAddress = Nothing Then
MessageBox.Show("Please Enter " & strIncomingName, "Data Missing")
ValidInputIPAddressCheck = False
Return ValidInputIPAddressCheck
End If
If 0 < intIPSegment1 < 255 Then
Else
MessageBox.Show("Invalid IP Error: " & strIncomingName & "." & vbCrLf _
& "IP is not valid." & vbCrLf _
& "Rejected IP Segment = " & intIPSegment1, "IP Address Error")
ValidInputIPAddressCheck = False
Return ValidInputIPAddressCheck
End If
If 0 < intIPSegment2 < 255 Then
Else
MessageBox.Show("Invalid IP Error: " & strIncomingName & "." & vbCrLf _
& "IP is not valid." & vbCrLf _
& "Rejected IP Segment = " & intIPSegment2, "IP Address Error")
ValidInputIPAddressCheck = False
Return ValidInputIPAddressCheck
End If
If 0 < intIPSegment3 < 255 Then
Else
MessageBox.Show("Invalid IP Error: " & strIncomingName & "." & vbCrLf _
& "IP is not valid." & vbCrLf _
& "Rejected IP Segment = " & intIPSegment3, "IP Address Error")
ValidInputIPAddressCheck = False
Return ValidInputIPAddressCheck
End If
If 0 < intIPSegment4 < 255 Then
Else
MessageBox.Show("Invalid IP Error: " & strIncomingName & "." & vbCrLf _
& "IP is not valid." & vbCrLf _
& "Rejected IP Segment = " & intIPSegment4, "IP Address Error")
ValidInputIPAddressCheck = False
Return ValidInputIPAddressCheck
End If
ValidInputIPAddressCheck = True
Return ValidInputIPAddressCheck
End Function
End Class
Imports System.Text.RegularExpressions
Public Class Ticket_Request_Form
Dim myXMLFile = "Tickets.xml"
Public strIPAddress As String
Public intIPSegment1 As Integer
Public intIPSegment2 As Integer
Public intIPSegment3 As Integer
Public intIPSegment4 As Integer
Public blnAllInputsValid As Boolean = False
Private Sub Ticket_Request_Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
If My.Computer.FileSystem.FileExists(myXMLFile) = True Then
DsTickets.ReadXml(myXMLFile)
End If
End Sub
Private Sub TicketsBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles TicketsBindingNavigatorSaveItem.Click
DtabTicketsBindingSource.EndEdit()
Try
DsTickets.WriteXml(myXMLFile)
MessageBox.Show("Data Saved Successfully", "File Saved")
Catch ex As Exception
MessageBox.Show("Data Not Saved to Tickets.xml", "File Save Error")
End Try
strIPAddress = txtIPAddress.Text
blnAllInputsValid = False
ValidateUserInputs()
If blnAllInputsValid <> True Then
Exit Sub
End If
DtabTicketsBindingSource.EndEdit()
Try
DsTickets.WriteXml(myXMLFile)
MessageBox.Show("Data Saved Successfully", "File Saved")
Catch ex As Exception
MessageBox.Show("Data Not Saved to Tickets.xml", "File Save Error")
End Try
ValidateUserInputs()
If blnAllInputsValid <> True Then
Exit Sub
End If
DtabTicketsBindingSource.EndEdit()
Try
DsTickets.WriteXml(myXMLFile)
MessageBox.Show("Data Saved Successfully", "File Saved")
Catch ex As Exception
MessageBox.Show("Data Not Saved to ModLibrary.xml", "File Save Error")
End Try
End Sub
Private Sub BindingNavigatorDeleteItem_Click(sender As Object, e As EventArgs) Handles BindingNavigatorDeleteItem.Click
Dim confirm_msg As Integer
confirm_msg = MessageBox.Show("DELETE RECORD FOR " & txtProblem.Text & "?",
"Confirm Delete", MessageBoxButtons.YesNo,
MessageBoxIcon.Information)
If confirm_msg = vbYes Then
MessageBox.Show("Record Marked for Deletion." & vbCrLf _
& "Click the Save Icon to Save Changes" & vbCrLf _
& "and Permanently Delete the Record. ", "Delete in Progress")
Else
Me.Controls.Clear()
InitializeComponent()
Ticket_Request_Form_Load(e, e)
MessageBox.Show("Record Delete Cancelled." & vbCrLf _
& "File Returned to First Record.", "Delete Cancelled")
End If
End Sub
Public Sub ValidateUserInputs()
blnAllInputsValid = False
Dim strUserInputIPAddress As String = txtIPAddress.Text
Dim strInputIPAddressName As String = "IP Address"
Dim blnIPAddressIsValid As Boolean = False
blnIPAddressIsValid = ValidInputIPAddressCheck(strUserInputIPAddress, strInputIPAddressName)
If blnIPAddressIsValid = False Then
txtIPAddress.Focus()
blnAllInputsValid = False
Exit Sub
End If
blnAllInputsValid = True
End Sub
Public Function ValidInputIPAddressCheck(ByVal strIncomingIPAddress As String, ByVal strIncomingName As String) As Boolean
If strIncomingIPAddress = Nothing Then
MessageBox.Show("Please Enter " & strIncomingName, "Data Missing")
ValidInputIPAddressCheck = False
Return ValidInputIPAddressCheck
End If
If 0 < intIPSegment1 < 255 Then
Else
MessageBox.Show("Invalid IP Error: " & strIncomingName & "." & vbCrLf _
& "IP is not valid." & vbCrLf _
& "Rejected IP Segment = " & intIPSegment1, "IP Address Error")
ValidInputIPAddressCheck = False
Return ValidInputIPAddressCheck
End If
If 0 < intIPSegment2 < 255 Then
Else
MessageBox.Show("Invalid IP Error: " & strIncomingName & "." & vbCrLf _
& "IP is not valid." & vbCrLf _
& "Rejected IP Segment = " & intIPSegment2, "IP Address Error")
ValidInputIPAddressCheck = False
Return ValidInputIPAddressCheck
End If
If 0 < intIPSegment3 < 255 Then
Else
MessageBox.Show("Invalid IP Error: " & strIncomingName & "." & vbCrLf _
& "IP is not valid." & vbCrLf _
& "Rejected IP Segment = " & intIPSegment3, "IP Address Error")
ValidInputIPAddressCheck = False
Return ValidInputIPAddressCheck
End If
If 0 < intIPSegment4 < 255 Then
Else
MessageBox.Show("Invalid IP Error: " & strIncomingName & "." & vbCrLf _
& "IP is not valid." & vbCrLf _
& "Rejected IP Segment = " & intIPSegment4, "IP Address Error")
ValidInputIPAddressCheck = False
Return ValidInputIPAddressCheck
End If
ValidInputIPAddressCheck = True
Return ValidInputIPAddressCheck
End Function
End Class
如果有人知道我如何将 IP 地址分离为变量 intIPSegment1、intIPSegment2、intIPSegment3 和 intIPSegment4,我们将不胜感激。
提前致谢, 阿克西登
答:
0赞
Étienne Laneville
4/7/2023
#1
可以使用 Strings.Split 将 IP 地址分解为 4 个八位字节,然后可以验证这些八位字节:
Dim ipAddress As String = "127.0.0.1"
' Check for "localhost"
If Strings.StrComp(ipAddress, "localhost", CompareMethod.Text) = 0 Then
ipAddress = "127.0.0.1"
End If
If ipAddress.Contains(".") Then
Dim octets As String() = Strings.Split(ipAddress, ".")
If octets.Length = 4 Then
For Each octet As String In octets
' Validate value
Dim value As Integer = CType(octet, Integer)
If value >= 0 And value <= 255 Then
' Valid octet
Else
' Invalid octet
End If
Next
Else
' Incorrect number of octets
End If
Else
' Octets not separated by periods
End If
由于您想指出哪个八位字节在原始代码中不正确,因此可以使用循环而不是循环:For
For Each
For octet As Integer = 1 To octets.Length
' Validate value
Dim value As Integer = CType(octets(octet - 1), Integer)
If value >= 0 And value <= 255 Then
' Valid octet
Else
' Invalid octet
End If
Next
这样,您可以使用它来指示哪个八位字节无效。octet
评论
0赞
Axiden
4/24/2023
If Strings.StrComp(ipAddress, “localhost”, CompareMethod.Text) = 0 Then ipAddress = “127.0.0.1” 结束 如果也是从哪里得到 ip 127.0.0.1
0赞
Étienne Laneville
4/24/2023
@Axiden see localhost.这是您可能不需要的特殊情况,但有时用户会连接到他们的计算机,以便他们使用 转换为 .如果对您有帮助,请将答案标记为已接受。localhost
127.0.0.1
0赞
Axiden
4/24/2023
#2
这就是我验证 IP 地址的方式(归功于 @EtienneLaneville),这只是稍微编辑了一下以使用我的代码。
Public Function ValidInputIPAddressCheck(ByVal strIncomingIPAddress As String, ByVal strIncomingName As String) As Boolean
If strIPAddress = "-" Then
Else
If strIncomingIPAddress = Nothing Then
MessageBox.Show("Please Enter " & strIncomingName, "Data Missing")
ValidInputIPAddressCheck = False
Return ValidInputIPAddressCheck
End If
If strIPAddress.Contains(".") Then
Dim octets As String() = Strings.Split(strIPAddress, ".")
If octets.Length = 4 Then
For Each octet As String In octets
' Validate value
Dim value As Integer = CType(octet, Integer)
If value >= 0 And value <= 255 Then
' Valid octet
Else
ValidInputIPAddressCheck = False
MessageBox.Show("Invalid IP Address Format Detected for " & strIncomingName & "." & vbCrLf &
"Please ensure that all the IP segment are between 0 and 255.", "IP Address Format Error")
txtName.Focus()
Exit Function
End If
Next
Else
ValidInputIPAddressCheck = False
MessageBox.Show("Invalid IP Address Format Detected for " & strIncomingName & "." & vbCrLf &
"Please ensure there are 4 IP segments and not.", "IP Address Format Error")
txtName.Focus()
Exit Function
End If
Else
' Octets not separated by periods
End If
End If
ValidInputIPAddressCheck = True
End Function
评论
IPAddress.TryParse
方法将在一行代码中完成此操作。String.Split
Byte.TryParse