호스트를 확인하기 위한 스크립트가 필요합니다.
이제 로컬 컴퓨터에서 이 스크립트를 실행합니다.
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를 사용하시겠습니까?
대부분의 명령은 단순히 command 앞에 추가하여 원격으로 실행할 수 있으므로 ==> 로 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
element 만으로 전체 행을 덮어쓰고$8
나머지는 효과적으로 삭제합니다. 이는 다음을 대체합니다.'{print $8}'
gsub("https?://|[/:].*","")}
두 개의 gsub 호출을 모든 가능성을 포괄하는 호출로 바꾸십시오. 코드에서 "http://"를 두 번 검색했는데 http와 일치하지 않았습니다.에스.!/([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}