lsof -Piのいくつかの出力をgeoiplookupに渡してみてください。

lsof -Piのいくつかの出力をgeoiplookupに渡してみてください。

私は出力の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
}

おすすめ記事