簡體   English   中英

如何搜索多個文本文件的IP地址,並使用PowerShell輸出找到文本文件的IP地址?

[英]how to search multiple text files for IP addresses and output the IP addresses found to a text file using powershell?

我正在用這個打磚牆。 我的任務是在Windows服務器列表中搜索IIS日志,並在日志文件中創建連接到服務器的所有IP地址的報告。 如果我使用Linux,那將很容易。 我可以使用grep和cut並在幾分鍾內完成。 但是,這些是內部服務器,我無法從BASH shell訪問它們。 我需要創建一個腳本並使用PowerShell在本地服務器上運行它。

我能夠得到的就是首先運行一個腳本來搜索C:\\ inetpub \\ logs \\ LogFiles \\中的所有.log文件,查找看起來像IPV4地址的任何內容並將其轉儲到CSV文件中

get-childItem C:\inetpub\logs\logfiles\ -include *.log -rec | select-String -pattern ‘\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b’ | select-Object -Propery 'Line' | export-CSV C:\temp\output.txt -notypeinformation

這會創建一個包含每個日志行的csv文件,其中包含IP地址。 然后我針對該文件運行第二個腳本,該文件查找IP地址並將它們輸出到另一個文件(不可否認地從某個地方“借用”)

$FilesOfInterest = (
    "*.csv"
)

$pattern = ‘\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b’

function FindFilesWithContent($Root, $Include, $Pattern){
    try{
        Get-ChildItem -Path:$Root -Include:$Include `
            -Recurse -Force -ErrorAction:SilentlyContinue |
            ?{!$_.PSIsContainer} |
        ForEach-Object{
            Write-Progress $_.FullName;
            $item = $_;
            Get-Content $_ -ErrorAction SilentlyContinue |
            ForEach-Object {
                if($_ -match $Pattern){
                    "" | select filename,match | %{
                        $_.filename = $item.FullName;
                        $_.match = $matches[0];
                        return $_ 
                    }
                }

            }
        }
    }
    catch{
    }
}


FindFilesWithContent -Root C:\temp -Include $FilesOfInterest -Pattern $pattern |export-csv C:\temp\filtered.csv

我遇到的問題是,一旦找到IP地址,它就會跳到下一行。 日志文件的每一行都以時間戳和服務器本身的IP地址開頭,所以我最終得到的是130,000行192.168.1.X,這對我來說完全沒用。

如果我使用Linux,那將很容易。 我可以使用grep和cut並在幾分鍾內完成。 但是,這些是內部服務器,我無法從BASH shell訪問它們。

在Windows上,有效查詢IIS日志文件的最可行方法是使用Microsoft的LogParser實用程序

LogParser支持類似SQL的查詢,以獲取日志中所有客戶端IP地址的列表:

logparser "SELECT DISTINCT c-ip INTO C:\clientips.txt FROM C:\inetpub\logs\logfiles\*.log"

為了分析IIS日志,我強烈建議使用Logparser 一種易於使用的命令行工具,它使用SQL方言從數據源中提取信息。

您可以使用以下代碼獲取到達您網站的IP。 只需選擇logfilename,或者如果要分析多個日志文件,只需使用通配符,如“c:/ logs / ex *”

logparser "select c-ip, count(c-ip) as requestcount from [LogFileName] group by c-ip order by count(c-ip) desc"

如果你不是SQL的忠實粉絲,有人用超過50個有用的例子寫了這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM