ホストを確認するためのスクリプトが必要です。
これで、ローカルコンピュータでこのスクリプトを実行します。
for i in `tail -F access.log | awk '{print $8}' | awk '{gsub("http://|/.*","")}2' | awk '{gsub("http://|:.*","")}1' | grep -E -v "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"`
do
nslookup $i [dns-server_ip];
done > ips.txt
しかし、私は必要です。尾一部のリモートホストからファイルをインポートして実行する探す私のローカルコンピュータでは、これを行う方法がわかりません。
ベストアンサー1
SSHを使用しますか?
ほとんどのコマンドは単にコマンドの前に追加してリモートで実行できるので、==>にssh
置き換えてください。tail -F access.log
ssh REMOTEHOST tail -F access.log
ssh myUSER@myREMOTEHOST tail -F access.log |
awk '{print $8}' |
awk '{gsub("http://|/.*","")}2' | awk '{gsub("http://|:.*","")}1' |
grep -E -v "([0-9]{1,3}\.){3})[0-9]{1,3}" | while read i ;
do
nslookup $i $dnsServerIP;
done > ips.txt
@kasperdと@archemarも暗示したように、そのように長いパイプはきれいにすることができ、きれいにする必要があります。私の意見は次のとおりです。
ssh myUSER@myREMOTEHOST tail -F access.log |
awk '{$0=$8; gsub("https?://|[/:].*","")} !/([0-9]{1,3}.){1,3}[0-9]{1,3}/' |
while read i ; do
nslookup $i $dnsServerIP;
done > ips.txt
説明する:
$0=$8
。出力例では、必須URLを含む列は#8です。このコマンドは$0
要素だけで行全体を上書きし、$8
残りは効果的に削除します。これは以下を置き換えます。'{print $8}'
gsub("https?://|[/:].*","")}
2つのgsub呼び出しをすべての可能性をカバーする呼び出しに置き換えます。コードで「http://」を2回検索しましたが、httpと一致しませんでした。S。!/([0-9]{1,3}.){1,3}[0-9]{1,3}/'
個々のgrep呼び出しをまったく同じ正規表現に置き換えます。$0
数値IPではない場合はtrueと評価され、暗黙的に実行されます{print $0}'
。少し短く行ってもh=$0;gsub(/[0-9.]/,"",h)} h
同じ効果が得られます。
注: - 尾への呼び出し2
と1
次の値はで評価され、暗黙的に拡張されます。これは、私の解決策の最後の正規表現が一致しない行を暗黙的に印刷する方法/理由です。}
gsub
true
true {print $0}