sunRef/VB
IP형식 알아보는 모듈
민성아빠
2003. 10. 22. 14:33
Public Function IsStrIP(strIp As String) As Boolean
'문법에 맞는 아이피냐? 아니냐?
'000.000.000.000, 127.0.0.1
'각 숫자는 무조건 0보다 크고 255보다 작아야 한다. 단, 로컬 아이피인 127.0.0.1의 경우 가운데 숫자들이 0이므로
'이것을 처리할 수 있어야 한다.
Dim SplitIP() As String
Dim i As Byte
'최대 자릿수인 15자리수가 넘어갔을 경우와 최소 자릿수인 7자리수가 안될 경우
If Len(strIp) > 15 Or Len(strIp) < 7 Then GoTo msgerr
'-------------- 1처리 -----------------
SplitIP = Split(strIp, ".")
'--------------------------------------
'dot(점으)로 나눈 숫자들이 3(=4)과 같지 않으면 아이피가 아닌것으로 판정함.
If UBound(SplitIP) <> 3 Then GoTo msgerr
'나눈 문자열들 중 255보다 크거나 0보다 작을 때 및 빈문자열일 경우 아이피 아님판정
For i = 0 To UBound(SplitIP) '딱 4개로 떨어지지만 확실하게 하기 위해 Ubound사용
If val(SplitIP(i)) > &HFF Or val(SplitIP(i)) < 0 Or SplitIP(i) = "" Then
If (i = 1 Or i = 2) And val(SplitIP(i)) = 0 Then '가운데 숫자는 넘기기
Else
GoTo msgerr
End If
End If
Next
IsStrIP = True
Exit Function
msgerr:
IsStrIP = False
End Function
Public Function GetNonzeroIpAddress(IpStr As String) As String
'아래는 화면디스플레이할 때 자릿수에 맞춰 보기 좋게 하기 위해서 무조건 3자리로 표시합니다.
'예를 들어 192.168.004.188 이런식으로 화면 디스플레이 합니다.
'그런데 이런 상태로 통신하면 안되죠. 이것을 다시 192.168.4.188로 만들기 위한 함수입니다.
Dim pos As Integer
Dim temp_ipstr As String
Dim IPaddr(4) As String
Dim I As Integer
temp_ipstr = IpStr
For I = 1 To 4
pos = InStr(temp_ipstr, ".")
If pos < 0 Then
GetNonzeroIpAddress = ""
Exit Function
ElseIf pos = 0 Then
IPaddr(I) = temp_ipstr
temp_ipstr = ""
Else
IPaddr(I) = Left(temp_ipstr, pos - 1)
temp_ipstr = Mid(temp_ipstr, pos + 1)
End If
While Left(IPaddr(I), 1) = "0"
IPaddr(I) = Mid(IPaddr(I), 2)
Wend
Next
GetNonzeroIpAddress = IPaddr(1) & "." & IPaddr(2) & "." & IPaddr(3) & "." & IPaddr(4)
End Function
Public Function GetPushZeroIP(IpStr As String) As String
'아래 함수는 위의 함수가 하는일의 반대일을 합니다. 화면 디스플레이를 보기 좋게 하기 위해
'세자리 씩 끊어주는 함수죠
Dim IPaddr() As String, I As Byte
IPaddr() = Split(IpStr, ".")
For I = 0 To UBound(IPaddr)
IPaddr(I) = Format(IPaddr(I), "000")
Next
GetPushZeroIP = IPaddr(0) & "." & IPaddr(1) & "." & IPaddr(2) & "." & IPaddr(3)
End Function
'아래 함수는 스트링 형식으로 되어있는 아이피를 바이트 배열로 다시 Long타입으로
'바꿔주는 함수입니다.
'일반적으로 잘 안쓰이지만 장비계통일 하다보면 장비의 아이피를 설정할때 쓰이게
'되는데 장비와 아이피 스트링을 주고 받으려면 Long타입으로 주고 받을 때 사용됩니다.
Public Function GetIptoLong(IPString As String) As Long
Dim longip As Long
Dim nCnt As Byte
Dim value(4) As Byte
Dim strTemp() As String
If IPString = "" Then Exit Function
strTemp = Split(IPString, ".")
For nCnt = 0 To 3
value(nCnt) = val(strTemp(nCnt))
Next
CopyMemory longip, value(0), 4
GetIptoLong = longip
End Function
Public Function GetLongtoIp(ByVal longip As Long) As String
'아래함수는 위의 함수 역기능을 하는 함수로 Long타입으로 되어 있는 것을
'아이피 스트링 타입으로 변환합니다.
Dim value(3) As Byte
Dim nCnt As Byte
CopyMemory value(0), longip, 4
For nCnt = 0 To 3
If value(nCnt) > 255 Then
GetLongtoIp = "ERR"
Exit Function
End If
Next
GetLongtoIp = CStr(value(0)) & "." & CStr(value(1)) & "." & _
CStr(value(2)) & "." & CStr(value(3))
End Function
'문법에 맞는 아이피냐? 아니냐?
'000.000.000.000, 127.0.0.1
'각 숫자는 무조건 0보다 크고 255보다 작아야 한다. 단, 로컬 아이피인 127.0.0.1의 경우 가운데 숫자들이 0이므로
'이것을 처리할 수 있어야 한다.
Dim SplitIP() As String
Dim i As Byte
'최대 자릿수인 15자리수가 넘어갔을 경우와 최소 자릿수인 7자리수가 안될 경우
If Len(strIp) > 15 Or Len(strIp) < 7 Then GoTo msgerr
'-------------- 1처리 -----------------
SplitIP = Split(strIp, ".")
'--------------------------------------
'dot(점으)로 나눈 숫자들이 3(=4)과 같지 않으면 아이피가 아닌것으로 판정함.
If UBound(SplitIP) <> 3 Then GoTo msgerr
'나눈 문자열들 중 255보다 크거나 0보다 작을 때 및 빈문자열일 경우 아이피 아님판정
For i = 0 To UBound(SplitIP) '딱 4개로 떨어지지만 확실하게 하기 위해 Ubound사용
If val(SplitIP(i)) > &HFF Or val(SplitIP(i)) < 0 Or SplitIP(i) = "" Then
If (i = 1 Or i = 2) And val(SplitIP(i)) = 0 Then '가운데 숫자는 넘기기
Else
GoTo msgerr
End If
End If
Next
IsStrIP = True
Exit Function
msgerr:
IsStrIP = False
End Function
Public Function GetNonzeroIpAddress(IpStr As String) As String
'아래는 화면디스플레이할 때 자릿수에 맞춰 보기 좋게 하기 위해서 무조건 3자리로 표시합니다.
'예를 들어 192.168.004.188 이런식으로 화면 디스플레이 합니다.
'그런데 이런 상태로 통신하면 안되죠. 이것을 다시 192.168.4.188로 만들기 위한 함수입니다.
Dim pos As Integer
Dim temp_ipstr As String
Dim IPaddr(4) As String
Dim I As Integer
temp_ipstr = IpStr
For I = 1 To 4
pos = InStr(temp_ipstr, ".")
If pos < 0 Then
GetNonzeroIpAddress = ""
Exit Function
ElseIf pos = 0 Then
IPaddr(I) = temp_ipstr
temp_ipstr = ""
Else
IPaddr(I) = Left(temp_ipstr, pos - 1)
temp_ipstr = Mid(temp_ipstr, pos + 1)
End If
While Left(IPaddr(I), 1) = "0"
IPaddr(I) = Mid(IPaddr(I), 2)
Wend
Next
GetNonzeroIpAddress = IPaddr(1) & "." & IPaddr(2) & "." & IPaddr(3) & "." & IPaddr(4)
End Function
Public Function GetPushZeroIP(IpStr As String) As String
'아래 함수는 위의 함수가 하는일의 반대일을 합니다. 화면 디스플레이를 보기 좋게 하기 위해
'세자리 씩 끊어주는 함수죠
Dim IPaddr() As String, I As Byte
IPaddr() = Split(IpStr, ".")
For I = 0 To UBound(IPaddr)
IPaddr(I) = Format(IPaddr(I), "000")
Next
GetPushZeroIP = IPaddr(0) & "." & IPaddr(1) & "." & IPaddr(2) & "." & IPaddr(3)
End Function
'아래 함수는 스트링 형식으로 되어있는 아이피를 바이트 배열로 다시 Long타입으로
'바꿔주는 함수입니다.
'일반적으로 잘 안쓰이지만 장비계통일 하다보면 장비의 아이피를 설정할때 쓰이게
'되는데 장비와 아이피 스트링을 주고 받으려면 Long타입으로 주고 받을 때 사용됩니다.
Public Function GetIptoLong(IPString As String) As Long
Dim longip As Long
Dim nCnt As Byte
Dim value(4) As Byte
Dim strTemp() As String
If IPString = "" Then Exit Function
strTemp = Split(IPString, ".")
For nCnt = 0 To 3
value(nCnt) = val(strTemp(nCnt))
Next
CopyMemory longip, value(0), 4
GetIptoLong = longip
End Function
Public Function GetLongtoIp(ByVal longip As Long) As String
'아래함수는 위의 함수 역기능을 하는 함수로 Long타입으로 되어 있는 것을
'아이피 스트링 타입으로 변환합니다.
Dim value(3) As Byte
Dim nCnt As Byte
CopyMemory value(0), longip, 4
For nCnt = 0 To 3
If value(nCnt) > 255 Then
GetLongtoIp = "ERR"
Exit Function
End If
Next
GetLongtoIp = CStr(value(0)) & "." & CStr(value(1)) & "." & _
CStr(value(2)) & "." & CStr(value(3))
End Function