Nmapは通常のユーザーよりrootとして遅い


1

私の会社独自のデータレコーダーの自動検出とリモートコントロールを可能にするためにbashスクリプトを作成しています。レコーダーはLinuxのカスタムバージョンを実行し、本質的に強力なpisまたはarduinosです。

デバイスのイーサネットポートは、ネットワークに接続したときにDHCPリースが与えられるように設定されています。デバイスを検出するために、私は自分のローカルマシンで/var/lib/dh​​cp/dhcpd.leasesを監視しています。それぞれのユニークなエントリに対して、私はsshサーバの状態をテストするためにportscanを使います。 nmap。このスクリプトの自動起動を有効にするために、/ etc / rc3.d / rc.localから呼び出されているため、起動時にrootによって実行されます。これは物事が奇妙になるところです。

常に新しい接続を検出できるようにするため、dhcpd.leasesファイルは無限ループでチェックされます。また、各ループの反復時間を短縮するために、システムのフットプリントを小さくしたいと考えています。 nmap。これは使用中の正確な行です。

nmap --max-retries=1 -p 22 --host-timeout=50ms $ip_address

普通のユーザーとして走ったときこのラインは信じられないほど一貫して動作します、しかしrootとして、私は一貫して肯定的な結果を得るために600msまでタイムアウトまで増加しなければなりません。私はそれを使ってそれをテストしました time これは通常の結果です(600msのタイムアウトで行われます)。

Starting Nmap 6.40 ( http://nmap.org ) at 2014-12-19 09:41 EST
Nmap scan report for 192.168.53.101
Host is up (0.00039s latency).
PORT    STATE SERVICE
22/tcp  open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

real    0m0.059s
user    0m0.043s
sys     0m0.004s

これは同じことの出力ですが、rootとしてログインしています。

Starting Nmap 6.40 ( http://nmap.org ) at 2014-12-19 09:48 EST
Nmap scan report for 192.168.53.101
Host is up (0.00035s latency).
PORT    STATE SERVICE
22/tcp  open  ssh
MAC Address: 00:04:D1:0B:03:EC

Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds

real    0m0.580s
user    0m0.056s
sys     0m0.008s

この余分な時間を何が引き起こす可能性があるのか​​、そしてそれをどのように防ぐのか、という考えはありますか?いくつかの予備調査から、rootは他のユーザーがアクセスできないいくつかのデフォルト設定で実行されることがわかります。どのように私はの条件を複製しに行くことができますか nmap 通常のユーザーによって実行されている?

追加の注意として、これはUbuntu 14.04 LTSマシンで実行されています。


stackoverflowからコピーされた stackoverflow.com/q/27568826/7552
glenn jackman

私によって。誰かがそれがここでもっと理にかなっていると言ったので。そして私は同意した。
JorganPubshire

わかっています。これは他の読者が答えを探したり答えたりすることを考えているときにリンクを明白にします。
glenn jackman

回答:


0

さらに調査した結果、manページのMISCセクションに興味があることがわかりました。 のためのオプションがあります --unprivileged これはrootであっても通常のユーザーとして操作を強制します。 これはかなり少ない操作を実行し、少ない情報を返しますが、あなたがしているのがポート22でSSHをチェックすることだけであれば、それはできるだけ速くそれをします。


0

この2つの実行で何が違いを引き起こしているのかはわかりませんが、一貫性と速度に関するいくつかのアイデアがあります。まず、選択したオプションを使用した場合のルートスキャンと非ルートスキャンの操作の違いは次のとおりです。

  • 非特権(非ルート)スキャンはTCPのペアを使用します connect() ホストが起動しているかどうかを判断するための呼び出し。ルートスキャンはARP要求を送信し、その応答についてネットワークを探知します。接続呼び出しではOSが以下のことを実行する必要があるため、ARP要求は高速になるはずです。
    1. ARP要求、または少なくともARPキャッシュ検索
    2. ターゲットからの応答を得るための少なくとも別のラウンドトリップ
  • 非ルートスキャンはフルTCPを使用します connect() スキャンポート22を呼び出し、完了したらソケットを閉じる必要があります。ルートスキャンは、「バックグラウンドで」接続を閉じるためにOSに依存して、ハーフハンドシェイクを実行します。

そのため、これらのオプションを使用すると、一般に特権スキャンが速くなります。ただし、待ち時間が非常に短いネットワーク接続では、さまざまなPCAPリスナーの設定によってルートスキャンが少し遅くなる可能性があります。しかし、それはおそらくあなたの遅れが起こっているところではありません。

あなたはスキャンの一部をスキップすることによってあなたのスキャンをスピードアップすることができます スキャンフェーズ 必要ない追加してみてください -n 名前の逆引き参照をスキップするためのフラグ( ちなみに、これはホストのタイムアウトには関係しません。 )またはあなたが 知っている ターゲットが存在し、ポート22の応答だけを確認したい場合は、 -Pn ホスト検出フェーズをスキップするオプション。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.