私は出力の2番目の列をgeoiplookupに渡す方法を探しています。なるべく同じ行にありますが、必ずしもそうではありません。それが私が招集できる最善だ。利用可能ですが、残念ながら、geoiplookupの結果は接続リストの下にあります。より包括的な結果が欲しい。誰もが改善を提案できれば大歓迎です。
ns () {
echo ""
while sleep 1; do
lsof -Pi |
grep ESTABLISHED |
sed "s/[^:]*$//g" |
sed "s/^[^:]*//g" |
sed "s/://g" |
sed "s/->/\t/g" |
grep -v localdomain$ |
tee >(for x in `grep -o "\S*$"`; do geoiplookup $x | sed "s/GeoIP.*: /\t/g"; done)
done
}
現在の結果は次のとおりです。
<Port> <URL or IP if no reverse available #1>
<Port> <URL or IP if no reverse available #2>
<geoiplookup trimmed result #1>
<geoiplookup trimmed result #2>
ベストアンサー1
これがRobotJohnnyのおかげで私が得た結果です。
ns () {
echo ""
while sleep 1; do
IFS=$'\n'
for line in $(lsof -Pi |
grep ESTABLISHED |
grep -ve "localdomain:[0-9]* .EST" \
-e "search.msn.com:[0-9]* .EST" \
-e "spider.yandex.com:[0-9]* .EST" \
-e "google.com:[0-9]* .EST"); do
cmdpidusr=$(echo $line | awk -v OFS='\t' '{print $1, $2, $3}')
node=$(echo $line | awk '{print $8}')
ipadd=$(echo $line | awk '{print $9}' | cut -d ">" -f 2 | cut -d ":" -f 1)
port=$(echo $line | awk '{print $9}' | cut -d ">" -f 1 | cut -d ":" -f 2 | cut -d "-" -f 1)
geoip=$(geoiplookup $ipadd | sed "s/GeoIP.*: \S* //g")
echo -e "$cmdpidusr\t$node\t$port\t$ipadd\t$geoip" | sed "s/\s*resolve hostname.*//g" | grep -v root
done | column -t -s $'\t' | sed "s/ \s*/ /g"
unset IFS
done
}