Страницы: 1
RSS
Привязка широты-долготы к IP адресу
 
Доброго дня

В VBA новичек, пара дней всего, поэтому прошу помощи, помогите плз разобраться с темой. Есть первая книга excel с одним листом, в нем один столбец с случайными IP адресами и два пустых столбца Latitude и Longitude. Есть вторая книга excel, с одним листом с тремя столбцами, Network, Latitude, Longitude. Во второй книге перечислены подсети с маской 16, а на столбцах Latitude и Longitude указаны соответствующие этим подсетям широта и долгота (широта и долгота городов России).
Задача следующая, нужно проверить, есть ли для всех ячеек со случайным IP адресом из первой книги совпадение в столбце с подсетями второй книги (совпадение по первым двум октетам IP адреса, остальные два октета игнорируются), если совпадение найдено, скопировать значение широты-долготы из столбцов Latitude и Longitude этой ячейки второй книги в соответствующие ячейки столбцов Latitude и Longitude первой книги.
Сейчас делаю это вручную, много времени занимает, может быть есть способ автоматизировать этот процесс?
Изменено: RockerMan - 29.05.2019 13:00:13
 
=IFERROR(VLOOKUP(TRIM(LEFT(SUBSTITUTE(A2;".";"     ";2);7))&".0.0";[ВтораяКнига.xlsx]Лист1!$A:$C;2;);"")

В следующий раз делайте примеры с данными которые можно обрабатывать, а то во второй книге нет данных для первой.

И Тема поиск по первым двум октетам IP адреса  или выделение первых двух октетов из IP адреса. можно /16 приплести, но не стоит.
Изменено: БМВ - 29.05.2019 12:53:47
По вопросам из тем форума, личку не читаю.
 
понял, исправил
 
Перенес все в одну книгу. Будет работать при условии что в первом октете не будет 3-х значных чисел
Код
=IFERROR(VLOOKUP(LEFT(A2;FIND(".";A2;4))&"0.0";Лист2.$A$2:$C$11;2;0);"")
 
Идея понятна, спасибо за помощь :)
 
и в своих темах надо отписываться https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=117527&TITLE_SEO=117527-peremeshchenie-dannykh-v-sosedniy-stolbets-posle-posledney-zapolnennoy&MID=974106&tags=%D0%B3%D0%BE%D1%80%D1%8F%D1%87%D0%B8%D0%B5+%D0%BA%D0%BB­%D0%B0%D0%B2%D0%B8%D1%88%D0%B8&sphrase_id=372722#message974106
По вопросам из тем форума, личку не читаю.
 
БМВ,простите, я новенький на форуме, название темы поменяли, я подумал что ее удалили совсем. Поэтому и не отвечал.
 
Работает, но, к сожалению, только с двухзначным октетом в IP. В случае трехзначного октета принимает значения широта-долгота от первых двух цифр октета. А адреса случайные, попадаются как с двузначными так и трехзначными в октетах.

Может быть есть возможность сделать проверку через VBA скрипт, а не через формулу? В таком случае можно будет вывести скрипт на кнопку и пересчет пройдет проще и быстрее.
 
RockerMan, вы какой вариант взяли? Попроще или правильный?
По вопросам из тем форума, личку не читаю.
 
БМВ,попроще который, сложный не осилил
Изменено: RockerMan - 30.05.2019 11:52:31
 
А отсюда тоже не осилили?
http://www.excelworld.ru/forum/10-41991-278659-16-1559205097

=ЕСЛИОШИБКА(ВПР(ЛЕВБ(ПОДСТАВИТЬ($A2;".";".*****";2);9);Лист2!$A$2:$C$999;СТОЛБЕЦ(););"")

Почитайте Правила форума. Этого (пункт 4.1) и того (пункт 5s)
Скажи мне, кудесник, любимец ба’гов...
 
RockerMan, создаёте темы на разных форумах - информируйте об этом ссылками.
 
Юрий М,ок, понятно, нет опыта общения на форумах, поэтому сильно не пинайте за косяки :)
 
_Boroda_,пытаюсь, но не очень получается. вот код макроса, что обрабатывает отчет Касперского, который приходит мне на мыло
Код
Sub CombineWorkbooks()   
  
      
   Dim FilesToOpen   
   Dim x As Integer   
  
   On Error GoTo ErrHandler   
   Application.ScreenUpdating = False   
      
      
  
   FilesToOpen = Application.GetOpenFilename _   
     (FileFilter:="Microsoft Excel Files (*.xls), *.xls", _   
     MultiSelect:=True, Title:="Files to Merge")   
  
   If TypeName(FilesToOpen) = "Boolean" Then   
       MsgBox "Файл не выбран!"   
       GoTo ExitHandler   
   End If   
  
      
   x = 1   
   While x <= UBound(FilesToOpen)   
       Workbooks.Open Filename:=FilesToOpen(x)   
       Sheets().Move After:=ThisWorkbook.Sheets _   
         (ThisWorkbook.Sheets.Count)   
       x = x + 1   
   Wend   
  
ExitHandler:   
   Application.ScreenUpdating = True   
   Exit Sub   
  
ErrHandler:   
   MsgBox Err.Description   
   Resume ExitHandler   
      
End Sub
Sub DeleteLists()
'
' DeleteLists Macros
'

'
    Sheets(Array("Summary", "Slave servers summary")).Select
    Sheets("Slave servers summary").Activate
    ActiveWindow.SelectedSheets.Delete
End Sub
Sub CollectDataFromAllSheets()
    Dim ws As Worksheet
     
    Set wbCurrent = ActiveWorkbook
    Workbooks.Add
    Set wbReport = ActiveWorkbook
     
    'копируем на итоговый лист шапку таблицы из первого листа
    'wbCurrent.Worksheets(1).Range("A1:D1").Copy Destination:=wbReport.Worksheets(1).Range("A1")
     
    'проходим в цикле по всем листам исходного файла
    For Each ws In wbCurrent.Worksheets
     
        'определяем номер последней строки на текущем листе и на листе сборки
        n = wbReport.Worksheets(1).Range("A1").CurrentRegion.Rows.Count
         
        'задаем исходный диапазон, который надо скопировать с каждого листа - на выбор:
        'Set rngData = ws.Range("A1:D5")            'фиксированный диапазон
        'Set rngData = ws.UsedRange                 'все, что есть на листе
        'Set rngData = ws.Range("F5").CurrentRegion    'область, начиная от ячейки F5
        Set rngData = ws.Range("A6", ws.Range("A6").SpecialCells(xlCellTypeLastCell))    'от А6 и до конца листа
         
        'копируем исходный диапазон и вставляем в итоговую книгу со следующей строки
        rngData.Copy Destination:=wbReport.Worksheets(1).Cells(n + 1, 1)
         
    Next ws
End Sub
Sub DeleteColumnAC()
'
' DeleteColumnAC Macros
'

'
    Range("A:A,C:C").Select
    Range("C1").Activate
    Selection.Delete Shift:=xlToLeft
End Sub
Sub RenameColumns()
'
' RenameColumns Macros
'

'
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "id"
End Sub
Sub CopyABtoD()
Dim arr(), arrNew()
Dim I&, J&, N&
With ActiveSheet
arr = .UsedRange.Value
For J = 1 To UBound(arr, 2)
    For I = 1 To UBound(arr, 1)
        If arr(I, J) <> Empty Then
            ReDim Preserve arrNew(N)
            arrNew(N) = arr(I, J)
            N = N + 1
        End If
    Next
Next
.Cells(1, UBound(arr, 2) + 1).Resize(UBound(arrNew) + 1) = Application.Transpose(arrNew)
End With
End Sub
Sub DeleteColumnAB()
'
' DeleteColumnAB Macros
'

'
    Range("A:A,B:B").Select
    Range("B1").Activate
    Selection.Delete Shift:=xlToLeft
End Sub
Sub DelDouble()
'
' DelDouble Macros
'

'
    Columns("A:A").Select
    ActiveSheet.Range("$A$1:$A$8706").RemoveDuplicates Columns:=1, Header:= _
        xlYes
End Sub
Sub startproc()
 CombineWorkbooks
 DeleteLists
 CollectDataFromAllSheets
 DeleteColumnAC
 RenameColumns
 CopyABtoD
 DeleteColumnAB
End Sub
Макрос startproc я назначил на кнопку. В итоге получается файл excel с одним столбцом со случайными IP адресами.
Мне нужен макрос excel
Код
Sub
...
End Sub

чтобы можно было его включить в вышеуказанный список макросов и обратотать отчет целиком макросами, а как включить ваше решение с
Код
=ЕСЛИОШИБКА(ВПР(ЛЕВБ(ПОДСТАВИТЬ($A2;".";".*****";2);9);Лист2!$A$2:$C$999;СТОЛБЕЦ(););"")

я не совсем понимаю, написал же в начале темы, что в макросах VBA опыт только уже три дня пока.
 
RockerMan, Просто интересно и зачем? построить на карте от кель пришла угроза?
Чуть опасность где видна,
Верный сторож как со сна
Шевельнется, встрепенется,
К той сторонке обернется
И кричит: «Кири-ку-ку.
Царствуй, лежа на боку!»

Если атака - то из Китая, там ресурс дешевле, даже если проксировано через их сервер. Что даст знание о координатах регистрации провайдера, чей пул IP проверяется?
По вопросам из тем форума, личку не читаю.
 
БМВ,ну, почти так :)
Данные нужны для визуализации атак на Gephi и вывод потом итоговую картинку на экран большого телевизора, с привязкой к геолокации :)

PS. Картинка дает понимание, кто кого в России по регионам атакует или наоборот подвергается атаке.
Изменено: RockerMan - 30.05.2019 12:47:25
 
БМВ, _Boroda_, спасибо за помощь, решение с формулой в любом случае сильно помогает и сокращает обработку отчета.

Юрий М, спасибо за науку, ибо когда твои (т.е. мои) действия не стыкуются с Правилами, это неприятно для постоянных посетителей форума.
 
Цитата
RockerMan написал:
Данные нужны для визуализации атак на Gephi
нужно делать онлайновыми, а не ….

Вы б паказали исходный файл и что в результате хотите получить. (пследнее примерно понятно)
Изменено: БМВ - 30.05.2019 14:21:09
По вопросам из тем форума, личку не читаю.
 
БМВ,с онлайновыми данными согласен. Сейчас изучаю возможности Gephi работать c БД, чтобы получать сразу данные из баз.
Сами исходники отчетов вряд ли можно выложить, там все данные по регионам, адреса, доменные имена, переработанный только если, но он (отчет) очень большой.
Словами объяснить можно, один excel файл, в первых двух листах итоговые данные от Касперского, мне они не надо, я их удаляю, затем по отдельным листам данные по каждому региону. В листах 4 столбца, доменное имя хоста, адрес атакующего хоста, вирус (эксплойт,... то что словит Касперский), адрес атакуемого хоста.
После обработки визуализирую через Gephi, делаю экспорт (плагин Sigma.js) и выкладываю на веб сервер.  
 
Цитата
RockerMan написал:
Сами исходники отчетов вряд ли можно выложить, там все данные по регионам, адреса, доменные имена, переработанный только если, но он (отчет) очень большой.
все и ненадо, убираются данные с тех листов, что точно ненужны, и с остальных исключая 2. на них оставляются пара десятков строк. с данными. Этого хватит чтоб понять что за исходные. Количество регионов фиксированное?
По вопросам из тем форума, личку не читаю.
 
БМВ, да, количество регионов фиксированное.
В атаче файл отчета. Отчет Касперского о сетевых атаках. Сначала идут два листа с итогами работы Касперского, я их удалил, затем регионы, оставил два листа для примера. Количество строк разное по регионам, оставил несколько для примера.
Страницы: 1
Наверх