Я работал над сценарием, который принимает выходные данные с сервера системного журнала, содержащего журналы брандмауэра, реорганизует эти выходные данные в новый файл CSV в более удобочитаемом формате, а затем выполняет поиск по исходным IP-адресам для идентификации откуда происходит городской трафик. Я не уверен, как получить результаты от моей функции, которая ищет подробности об IP-адресах, чтобы добавить дополнительные столбцы в новый файл CSV.
Это пример отдельной записи из исходного файла. Примечание. Я отредактировал IP-адреса, чтобы замаскировать их.
2018-07-01 14: 48: 47, Local7.Info, 192.168.1.00, device = "SFW"
дата = 2018-07-01 время = 14: 48: 39 часовой пояс = "PDT" имя_устройства = "XG"
device_id = 00000000000000 log_id = 010101600001 log_type = "Брандмауэр"
log_component = "Правило межсетевого экрана" log_subtype = "Разрешено" status = "Разрешить"
приоритет = длительность информации = 11 fw_rule_id = 3 policy_type = 3
user_name = "" user_gp = "" iap = 0 ips_policy_id = 0 appfilter_policy_id = 0
application = "Протокол защищенного сокета" application_risk = 1
application_technology = "Сетевой протокол"
application_category = "Инфраструктура" in_interface = "Port2"
out_interface = "Port1" src_mac = 00: 0:00: 0:00: 0 src_ip = 75.148.000.000
src_country_code = США dst_ip = 23.24.000.000 dst_country_code = США
протокол = "TCP" src_port = 55000 dst_port = 443 sent_pkts = 7 recv_pkts = 6
sent_bytes = 1369 recv_bytes = 918 tran_src_ip = 192.168.000.000
tran_src_port = 0 tran_dst_ip = 192.168.000.000 tran_dst_port = 0
srczonetype = "WAN" srczone = "WAN" dstzonetype = "LOCAL" dstzone = "LOCAL"
dir_disp = "" connevent = "Stop" connid = "1782869248" vconnid = ""
hb_health = "No Heartbeat" message = "" appresolvedby = "Подпись"
С помощью других пользователей я смог написать скрипт, который создает новый CSV-файл ( $ output_file ) в более удобном для читателя формате и ищет информацию о столбец src_ip . Я не уверен, как я могу взять результаты этой функции ( Get-IPGeolocation ) и добавить дополнительные столбцы в мой $ output_file с результатами.
#Parameters for environment
$regex = '\b(\w+)=([^ ]+)'
$input_path = "C:\powershell_work\ParsingSophos\data.csv"
$output_file = "C:\powershell_work\GeolocatingIPs\combine-output.csv"
#Function used to lookup IP-Address information.
function Get-IPGeolocation
{
Param
(
[string]$IPAddress
)
$request = Invoke-RestMethod -Method Get -Uri "http://geoip.nekudo.com/api/$IPAddress"
[PSCustomObject]@{
IP = $request.IP
City = $request.City
Country = $request.Country.Name
Code = $request.Country.Code
Location = $request.Location.Latitude
Longitude = $request.Location.Longitude
TimeZone = $request.Location.Time_zone
}
}
# Parsing the input_path file, and exporting to a more workable format
Select-String -LiteralPath $input_path -AllMatches -Pattern $regex | ForEach-Object {
$obj = New-Object pscustomobject
foreach ($match in $_.Matches) {
Add-Member -InputObject $obj -NotePropertyName $match.Groups[1].Value -NotePropertyValue $match.Groups[2].Value
}
$obj
} | Select-Object *_ip, srczone, src_country_code, dstzone, dst_country_code |
Export-Csv -NoTypeInformation $output_file
# Gathering list of Source IPs to be used in the lookup
$src_ips = Import-CSV $output_file | select -ExpandProperty src_ip
# Loop that runs each IP through the function to find IP address information
ForEach($ip in $src_ips) {
Get-IPGeolocation -IPAddress $ip
}
Запуск этого сценария с несколькими записями данных в вашем $ input_path CSV-файле возвращает результаты, подобные этим.
Выходной пример