Из IP получить URL

SAS!
Дата: 16.09.2005 11:49:06
Незнаю, куда написать сей вопрос... Если не угадал с форумом, не ругайте сильно!
Идея вот какая: есть распечатка интернетовского траффика по ADSL. Все это дело конвертирую в Аксесс, анализурую, подсчитываю... Потом внушение детям делаю :)
Так вот, там адреса обозначены как IP. А как из них можно получить WWW? И можно ли вообще?
ЛП
Дата: 16.09.2005 11:58:09
Если не угадал с форумом

По правде говоря - нихуа не угадал. Это ж п....ц какой-то... Почему мля не в форуме по Ораклу (например)? Или не в форуме "Работа"?

Так вот, там адреса обозначены как IP. А как из них можно получить WWW?

На один IP может быть зарегистрирована сотня-другая разных доменов. Вам какой нужен?
АлексейК
Дата: 16.09.2005 12:01:58
если надо анализировать траффик
лучше пропускать в интернет через проксю которая имеет отчеты
Тяп-ляп
Дата: 16.09.2005 12:03:19
Сделай форму с тексбоксами Text1 и Text2 и кнопкой Command1
В модуль этой формы добавь этот код:

'GetMachineName - то, что тебе нужно
'GetIPFromHostName - очевидно

Option Compare Database
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright ©1996-2005 VBnet, Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce
'               or publish this code on any web site,
'               online service, or distribute as source
'               on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
Private Const IP_SUCCESS As Long = 0
Private Const MAX_WSADescription As Long = 256
Private Const MAX_WSASYSStatus As Long = 128
Private Const WS_VERSION_REQD As Long = &H101
Private Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD \ &H100 And &HFF&
Private Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF&
Private Const MIN_SOCKETS_REQD As Long = 1
Private Const SOCKET_ERROR As Long = -1
Private Const ERROR_SUCCESS As Long = 0

Private Type WSADATA
   wVersion As Integer
   wHighVersion As Integer
   szDescription(0 To MAX_WSADescription) As Byte
   szSystemStatus(0 To MAX_WSASYSStatus) As Byte
   wMaxSockets As Long
   wMaxUDPDG As Long
   dwVendorInfo As Long
End Type

Private Declare Function gethostbyname Lib "wsock32.dll" _
  (ByVal hostname As String) As Long
 
Private Declare Sub CopyMemory Lib "kernel32" _
   Alias "RtlMoveMemory" _
  (xDest As Any, _
   xSource As Any, _
   ByVal nbytes As Long)

Private Declare Function lstrlenA Lib "kernel32" _
  (lpString As Any) As Long

Private Declare Function WSAStartup Lib "wsock32.dll" _
   (ByVal wVersionRequired As Long, _
    lpWSADATA As WSADATA) As Long
   
Private Declare Function WSACleanup Lib "wsock32.dll" () As Long

Private Declare Function inet_ntoa Lib "wsock32.dll" _
  (ByVal addr As Long) As Long

Private Declare Function lstrcpyA Lib "kernel32" _
  (ByVal RetVal As String, _
   ByVal Ptr As Long) As Long
                       
Private Declare Function gethostname Lib "wsock32.dll" _
   (ByVal szHost As String, _
    ByVal dwHostLen As Long) As Long

Private Sub Command1_Click()
   Dim sHostName As String
   'If SocketsInitialize() Then
          'obtain and pass the host address to the function
      Me.Text1 = GetMachineName()
      Me.Text2 = GetIPFromHostName(Me.Text1)
      SocketsCleanup
   'Else
   '     MsgBox "Windows Sockets for 32 bit Windows " & _
               "environments is not successfully responding."
   'End If
End Sub

Private Function SocketsInitialize() As Boolean
   Dim WSAD As WSADATA
   Dim success As Long
   SocketsInitialize = WSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS
End Function

Private Sub SocketsCleanup()
   If WSACleanup() <> 0 Then
       MsgBox "Windows Sockets error occurred in Cleanup.", vbExclamation
   End If
End Sub
  
Private Function GetMachineName() As String

   Dim sHostName As String * 256
  
   If gethostname(sHostName, 256) = ERROR_SUCCESS Then
      GetMachineName = Trim$(sHostName)
   End If
End Function

Private Function GetIPFromHostName(ByVal sHostName As String) As String
  'converts a host name to an IP address
   Dim nbytes As Long
   Dim ptrHosent As Long  'address of HOSENT structure
   Dim ptrName As Long    'address of name pointer
   Dim ptrAddress As Long 'address of address pointer
   Dim ptrIPAddress As Long
   Dim ptrIPAddress2 As Long

   ptrHosent = gethostbyname(sHostName & vbNullChar)

   If ptrHosent <> 0 Then

     'assign pointer addresses and offset

     'Null-terminated list of addresses for the host.
     'The Address is offset 12 bytes from the start of
     'the HOSENT structure. Note: Here we are retrieving
     'only the first address returned. To return more than
     'one, define sAddress as a string array and loop through
     'the 4-byte ptrIPAddress members returned. The last
     'item is a terminating null. All addresses are returned
     'in network byte order.
      ptrAddress = ptrHosent + 12
     
     'get the IP address
      CopyMemory ptrAddress, ByVal ptrAddress, 4
      CopyMemory ptrIPAddress, ByVal ptrAddress, 4
      CopyMemory ptrIPAddress2, ByVal ptrIPAddress, 4

      GetIPFromHostName = GetInetStrFromPtr(ptrIPAddress2)
   End If 
End Function

Private Function GetStrFromPtrA(ByVal lpszA As Long) As String

   GetStrFromPtrA = String$(lstrlenA(ByVal lpszA), 0)
   Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA)
  
End Function

Private Function GetInetStrFromPtr(Address As Long) As String 
   GetInetStrFromPtr = GetStrFromPtrA(inet_ntoa(Address))
End Function
SAS!
Дата: 16.09.2005 18:05:20
То ЛП (Спасибо, что не удалил топик)
Почему мля не в форуме по Ораклу (например)?

Так я ж на Аксессе упражняюсь...
сотня-другая разных доменов. Вам какой нужен?

Так все запущено? Мне бы хотелось знать тот домен, с которого траффик считает.
То АлексейК
если надо анализировать траффик
лучше пропускать в интернет через проксю которая имеет отчеты

Да это домашний траффик. Статсервер присылает по почте отчет о входящем-исходящем траффике. А адреса отправителя и получателя - IP. Свой-то знаю, а вот остальные... Ну и подумалось, а нет ли какого-нибудь не очень заморочного способа заменить IP-адрес на понятный.
То Тяп-ляп
Сделай форму с тексбоксами Text1 и Text2 и кнопкой Command1
В модуль этой формы добавь этот код:

Сделал... "Windows Sockets error occurred in Cleanup" выдает. В текстбоксы чо писать? IP-адреса? И вооще как с этой штуковиной обходиться?
ЛП
Дата: 16.09.2005 18:13:29
Так все запущено? Мне бы хотелось знать тот домен, с которого траффик считает.

Так при учете трафика - домен как бы и побоку.
Что "http://195.128.121.254", что "www.sql.ru", что "sql.ru", что "зарегистрированныймноюначужойайпишникдомен.ru" - адын хрен.
Тяп-ляп
Дата: 16.09.2005 18:19:12
Я сам использовал только так:
'Me.Text1 = GetMachineName()
Me.Text2 = GetIPFromHostName(Me.Text1)
В поле Text1 вбивал руками URL, в поле Text2 получал IP

Обратное разрешение не использовал

Еще есть вариант:
cmd
nslookup
вбиваешь IP
получаешь URL
Тяп-ляп
Дата: 16.09.2005 18:20:31
Тормозные это все варианты, для твоей задачи не годятся (если у тебя много адресов)
Latuk
Дата: 16.09.2005 20:32:07
>Да это домашний траффик
Ничего не мешает поставить свою проксю чтобы формировала паралельные отчеты
заодно поимеешь шанс поспорить насчет выставленного трафика
ежели кто под твоим логином приворовывает
или провайдер левый трафик по юзерам раскидывает
Shuhard
Дата: 16.09.2005 22:02:33
Latuk
>Да это домашний траффик
Ничего не мешает поставить свою проксю чтобы формировала паралельные отчеты
заодно поимеешь шанс поспорить насчет выставленного трафика
ежели кто под твоим логином приворовывает
или провайдер левый трафик по юзерам раскидывает

без сквида не жизнь