コマンドライン経由でネットワーク上の他のコンピューターを見つける


30

私のホームネットワークには少数のMacがあり、外部からはそのうちの1つだけにシェルアクセスできます。他のマシンのIPアドレスを知るにはどうすればよいですか?

回答:


39

試してみてくださいarp -aお使いのコンピュータの現在のARPテーブルを参照してください。コンピューターが対話したIPアドレスのみが表示されます。次のような出力(ネットワーク上のMACアドレスを隠すために少し隠されています):

$ arp -a
? (10.1.168.1) at xx:xx:9e:82:ab:f6 on en1 ifscope [ethernet]
? (10.1.168.16) at xx:xx:29:d3:17:8 on en1 ifscope [ethernet]
? (10.1.168.115) at xx:xx:2:4f:76:14 on en1 ifscope [ethernet]
? (10.1.168.131) at xx:xx:6b:d0:36:a5 on en1 ifscope [ethernet]
? (10.1.168.134) at (incomplete) on en1 ifscope [ethernet]
? (10.1.168.137) at xx:xx:65:46:cd:b8 on en1 ifscope [ethernet]
? (10.1.168.255) at ff:ff:ff:ff:ff:ff on en1 ifscope [ethernet]
? (192.168.4.255) at ff:ff:ff:ff:ff:ff on vmnet8 ifscope [ethernet]
? (192.168.110.255) at (incomplete) on vmnet1 ifscope [ethernet]

どのコンピューターがどれであるかについての詳細情報がない場合は、MACアドレスルックアップを介してネットワークカードのメーカーを特定することで、もう少し情報を得ることができます


12
申し訳ありませんが、これを正しいとマークするのにほぼ4年かかりました。
ジョンハダッド

arp -aコンピュータが操作したIPアドレスのみを表示します」とはどういう意味ですか。?最初にブロードキャスト(192.168.110.255)をpingし、すべてのデバイスから応答を取得してから、arpを使用して完全なリストを取得する必要がありますか?
ウェイシZen

10

他のすべてのマシンが、アクセスできるマシンと同じブロードキャストドメインにあると仮定すると、多くの場合、ブロードキャストアドレスへのpingで十分です。スリープ状態のマシン、pingに応答しないように構成されたマシン、pingには応答するがpingをブロードキャストしないマシンは検出されません。

% ifconfig -a | grep broadcast
        inet 192.168.1.241 netmask 0xffffff00 broadcast 192.168.1.255
% ping -i 5 -c 2 192.168.1.255
PING 192.168.1.255 (192.168.1.255): 56 data bytes
64 bytes from 192.168.1.241: icmp_seq=0 ttl=64 time=0.393 ms
64 bytes from 192.168.1.254: icmp_seq=0 ttl=255 time=2.511 ms (DUP!)
64 bytes from 192.168.1.65: icmp_seq=0 ttl=64 time=5.810 ms (DUP!)
64 bytes from 192.168.1.255: icmp_seq=0 ttl=64 time=7.886 ms (DUP!)
64 bytes from 192.168.1.241: icmp_seq=1 ttl=64 time=0.312 ms

--- 192.168.1.255 ping statistics ---
2 packets transmitted, 2 packets received, +3 duplicates, 0% packet loss
round-trip min/avg/max/stddev = 0.312/3.382/7.886/3.010 ms

最初と最後の応答は、ほとんど常にローカルマシンです。(DUP!)(この例でもひどく有用ではありませんブロードキャストアドレス自体で応答するいくつかのマシンを、示しが)応答は、他のマシンからです。

また、すべて1のブロードキャストアドレスを試すこともできます。

% ping -i 5 -c 2 255.255.255.255
PING 255.255.255.255 (255.255.255.255): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.392 ms
64 bytes from 192.168.1.254: icmp_seq=0 ttl=255 time=3.053 ms (DUP!)
64 bytes from 192.168.1.65: icmp_seq=0 ttl=64 time=8.685 ms (DUP!)
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.319 ms

--- 255.255.255.255 ping statistics ---
2 packets transmitted, 2 packets received, +2 duplicates, 0% packet loss
round-trip min/avg/max/stddev = 0.319/3.112/8.685/3.401 ms

この例は、あまり粗くないことを示しています。すべての(DUP!)sは他のマシンであり、ローカルマシンは127.0.0.1として簡単に識別されます。


8

Macにはすべてホスト名があるため、IPアドレスを知る必要はありません。代わりに、ホスト名のみを使用します。

ホスト名は、コンピューターに付けた名前に基づいています。そのため、コンピューターの名前が「Jon's Mac」の場合、使用するホスト名は「jons-mac.local」のようになります。

$ ssh jons-mac.local

コンピューターのホスト名がまだわからない場合は、そのコンピューターの共有設定でコンピューターのホスト名を見つけるか、dns-sdコマンドを使用してネットワーク上の他のコンピューターのホスト名を見つけることができます。このコマンドは、Bonjourを使用してネットワークサービスを参照できます。実際にいくつかのネットワークサービスを広告しているコンピューターのみを見つけることができます(一般的に気になるのはこれだけです)。

sshを提供するコンピューターに接続する場合は、次を使用して使用可能なコンピューターを見つけることができます。

dns-sd -B _ssh._tcp .

一般に、サービス名を使用して特定のサービスを提供するホストを検索できます:http : //www.dns-sd.org/ServiceTypes.html

Bonjourプロトコルは、特定のサービスだけでなく、すべてのサービスを参照する機能も提供します。これを行うには、特別なサービスを参照します_services._dns-sd._udp

dns-sd -B _services._dns-sd._udp .

質問は、コマンドラインからネットワーク上の他のコンピューターを見つけることについて尋ねていますが、GUIでdns-sdアドバタイズされたサービスを参照することもできます。たとえば、Terminal.app> New Remote Connection ...は、アドバタイズされたssh、sftp、ftp、およびtelnetサービスを表示するウィンドウを表示します。


このコマンドのdns-sd -B _ssh._tcp .実行にかかる時間はどれくらいですか?
AJP

1
@AJPアドバタイズされているsshサービスがある場合、すぐに結果を返し始めます。しかし、「終了」とは、終了を意味する場合、終了しません。このコマンドは、存続期間の長いクエリを実行し、サービスが停止するまでネットワークにサービスが表示されたり消えたりするときに継続的に変更を出力します。
bames53


6

ちょっとやり過ぎかもしれませんが、nmapを使うことができます


1
これは質問に答える可能性がありますが、なぜそうするのかの説明を提供できれば、より良い答えになるでしょう。
DavidPostill

4

各IPアドレスに対して/ 24サブネットpingを実行するための、1つのライナー付きのクイックCLI。早くてちょっと汚いけど、うまくいく。

for (( x=1; x <= 254; x++ )); do ping -c 3 192.168.0.$x; done

説明:範囲を変更するには、x = 1からx = 130に変更するか、開始位置を254から終了に変更します(135など)。

for (( x=130; x <= 135; x++ ));

ping -c 3は3つのpingを送信します。pingの数を変更するには、3を別のものに変更し、アドレス範囲を変更するには、192.168.0を別のものに変更します。

do ping -c 30 10.10.0.$x;

1
これを行うには、単にfpingを使用できます。fping -ag 172.16.0.0/16
ıɾuǝʞ13年

これは...私にとっては、何もなく、迅速です
マックス・ウィリアムズ

これは、迅速で汚れたソリューションです。同様に、nmapのような正しいツールがなくても実装は迅速であり、nmapのような正しいツールほどパフォーマンスは高くありません。ホストのPingは、応答しない場合は時間がかかることがあります。これはマルチスレッドではないため、ホストが応答しない場合は時間がかかります。プラス面では、bash以外には何も必要ありません。
quinnr

2

LAN内の他のコンピューターの名前を知っている場合、最も簡単な方法はそれらにpingを実行することです:

$ ping foobar

Pinging foobar.lan [192.168.0.25] with 32 bytes of data:

Reply from 192.168.0.25: bytes=32 time<1ms TTL=64
Reply from 192.168.0.25: bytes=32 time<1ms TTL=64

これは、ローカルルーターまたはDHCPサーバーに依存する場合があります。そのままのホスト名が機能しない場合は、.localを追加してください(つまり、ping hostname.local)。

明らかに、これは大規模なLANや記憶力の乏しい人々にはうまく機能しません。


1

Macを使用している場合(10.5以降を想定)、デスクトップアクセス用にVNCを有効にし、Flame.appを使用します。

http://husk.org/apps/flame/

それは本当に必要なものを正確にすばやく提供する、本当に素敵な小さなユーティリティです。唯一のものは、SSHよりも遠くに行かなければならないということです。


1

Windowsの場合:

1)書き込み:for / L%I in(1,1,254)DO ping -w 30 -n 1 168.29.0。%I これにより、ローカルネットワーク内のすべてのアドレスにpingが実行されます。

2)次に書いてください:arp -a これは答えたすべてのアドレスを与えます


もちろん、ローカルネットワークアドレスによって異なります。私の場合は168.29.0.xxxです。192.168.0.xxx
Chavdar 14年

1
あなたの答えはWindowsに基づいていますが、OPは彼がMacを使用していると述べました。質問を編集して、これを考慮に入れるか、ソリューションがMacで機能するかどうかを述べてください。
マシューウィリアムズ

すべてのMACユーザーはWindows OSを使用しています...それなしでは生きられません...:D
user2173353
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.