Показать список компьютеров в локальной сети в Linux
Я веб-разработчик, который пытается лучше справиться с безопасностью. Я пытаюсь найти способ (в дистрибутивах на основе Linux/Debian) перечислить все компьютеры в той же локальной сети, где находится мой нетбук. Я попробовал «arp -n», но я не чувствую, что это полный список, так как мой iPhone находится на том же Wi-Fi-маршрутизаторе, что и мой нетбук, и это не помогло. Есть ли какой-нибудь лучший способ получить полный список машин, которые используют один и тот же шлюз?
10 ответов 10
Получите Nmap. Это программа Trinity, используемая в The Matrix, и вы можете выполнить сканирование, чтобы найти все устройства, которые подключены к вашей локальной сети, и многое другое. Вот справочник.
Это то, что я использую, nmap и адрес, используя блочную нотацию CIDR для сети, которую вы хотите сканировать. Для начала вам нужно установить nmap, так как он может не поставляться с предустановленным дистрибутивом. На Ubuntu:
wlan1 Link encap:Ethernet HWaddr 00:1f:3b:03:d2:bf inet addr:192.168.1.104 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::21f:3bff:fe03:d2bf/64 Scope:Link .
Используйте inet addr и Mask для определения сетевого адреса в нотации CIDR, подробнее о CIDR здесь. Адрес:
Запустите nmap, используя параметр -sP, который будет сканировать только после проверки, подключен ли хост:
Starting Nmap 5.21 ( http://nmap.org ) at 2014-12-09 10:52 EST Nmap scan report for 192.168.1.1 Host is up (0.013s latency). MAC Address: -MAC ADDRESS- (Cameo Communications) . Nmap done: 256 IP addresses (5 hosts up) scanned in 3.26 seconds
Вот и все, если вам нужна дополнительная помощь по nmap, посмотрите официальную документацию по nmap или запустите:
arp -n показывает только те машины в вашей локальной сети, с которыми ваша машина уже общалась. Вы можете получить этот список для лучшего заполнения, отправив эхо-запросы на широковещательные и многоадресные адреса всех хостов: «Все единицы» (в двоичном формате) широковещательный адрес. Обратите внимание, что большинство IP-стеков преобразует это в широковещательные адреса подсетей для всех подсетей, к которым вы подключены:
Адрес многоадресной рассылки «все хосты». Мне это очень нравится, потому что больше шансов найти хосты, настроенные для других IP-подсетей, которые подключены к той же локальной сети Ethernet, что и вы:
Обратите внимание, что этот метод, а также другие методы, о которых я уже упоминал в других ответах, ищут только хосты с IP-достижимостью в текущей сети. Это, вероятно, все, что вам нужно заботиться, но злоумышленник может отслеживать или совершать плохие действия в сети, не будучи видимым через IP.
ip neigh и hosts Не требуется nmap / не требуется sudo. Основываясь на этом, вы можете создать скрипт на Python:
#!/usr/bin/env python """List all hosts with their IP adress of the current network.""" import os out = os.popen('ip neigh').read().splitlines() for i, line in enumerate(out, start=1): ip = line.split(' ')[0] h = os.popen('host <>'.format(ip)).read() hostname = h.split(' ')[-1] print("3>: <> (<>)".format(i, hostname.strip(), ip))
wget https://gist.githubusercontent.com/MartinThoma/699ae445b8a08b5afd16f7d6f5e5d0f8/raw/577fc32b57a7f9e66fdc9be60e7e498bbec7951a/neighbors.py
Например, вы можете попробовать пропинговать всю подсеть с помощью небольшого сценария оболочки Linux.
$ for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip>/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; done
Я не нашел существующие ответы достаточно удовлетворительными, поэтому я решил попробовать. В конце концов, FAQ предлагает предоставить контекст для ссылок. nmap отлично, если немного запутать в использовании. Вот кое-что, что я запускаю, чтобы обнаружить локальные сетевые устройства, которые в основном можно копировать и вставлять. nmap -sP (или nmap -sn ) сканирует с помощью команды ping Существуют и другие варианты «обнаружения хоста», например, с помощью nmap -sL или nmap -Pn .
Способ № 1.
ehtesh@x200arch:~$ # my wireless interface is listed as wlp3s0. Yours could be wlan0 or eth1. ehtesh@x200arch:~$ ip addr show wlp3s0 | grep "inet " inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0 ehtesh@x200arch:~$ arp -a ? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0 ehtesh@x200arch:~$ nmap -sP 172.18.72.0/24 Starting Nmap 6.41SVN ( http://nmap.org ) at 2013-12-17 20:08 EST Nmap scan report for 172.18.72.2 Host is up (0.017s latency). Nmap scan report for 172.18.72.253 Host is up (0.13s latency). Nmap done: 256 IP addresses (17 hosts up) scanned in 5.74 seconds ehtesh@x200arch:~$ arp -a | sort -n -k 1,1 ? (172.18.72.126) at ec:35:86:4a:37:d2 [ether] on wlp3s0 ? (172.18.72.148) at 10:9a:dd:b8:79:71 [ether] on wlp3s0 ? (172.18.72.178) at 9c:20:7b:7b:08:ba [ether] on wlp3s0 ? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0 ? (172.18.72.253) at b8:78:2e:19:05:0b [ether] on wlp3s0 ? (172.18.72.2) at 00:14:1c:da:e1:c2 [ether] on wlp3s0 ? (172.18.72.40) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0 ? (172.18.72.43) at d8:c7:c8:ce:0f:60 [ether] on wlp3s0 ? (172.18.72.44) at d8:c7:c8:ce:0f:68 [ether] on wlp3s0 ? (172.18.72.45) at 6c:f3:7f:c6:71:16 [ether] on wlp3s0 ? (172.18.72.46) at 6c:f3:7f:c4:4c:b3 [ether] on wlp3s0 ? (172.18.72.47) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0 ? (172.18.72.48) at 24:de:c6:c6:b6:78 [ether] on wlp3s0 ? (172.18.72.49) at 24:de:c6:c6:b6:e6 [ether] on wlp3s0 ? (172.18.72.51) at 00:9c:02:d0:4c:4e [ether] on wlp3s0 ? (172.18.72.54) at 00:23:76:99:99:bf [ether] on wlp3s0 ? (172.18.72.62) at 8c:70:5a:0d:06:18 [ether] on wlp3s0 ? (172.18.72.63) at 7c:e9:d3:51:86:55 [ether] on wlp3s0 ? (172.18.72.64) at a0:88:b4:47:eb:c8 [ether] on wlp3s0
Способ № 2. Я знаю, что это работает, но я не могу сказать, если это правильный путь.
ehtesh@x200arch:~$ #ifconfig | grep broadcast ehtesh@x200arch:~$ ip address show wlp3s0 | grep brd link/ether 00:1e:65:bf:1b:42 brd ff:ff:ff:ff:ff:ff inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0 ehtesh@x200arch:~$ ping -b -c 3 -i 20 172.18.75.255
Просмотр компьютеров в локальной сети из терминала Linux
Полный чайник в Linux. Как посмотреть из терминала все компьютеры, которые подключены к локальной сети ? Поясню подробней. Интернет-кабель у меня подключен к роутеру. От роутера идет несколько кабелей к компьютерам с Ubuntu. А теперь сам вопрос. Как мне с одного из этих компьютеров увидеть остальные компьютеры внутри сети роутера ?
А с какой целью интересуетесь ? Т.е. что вы понимаете под «компьютером подключенным к локальной сети». Вам их ip/mac адресов достаточно или вы ждете чего то большего
5 ответов 5
Не совсем понятно что имеется в виду, но предложу варианты (маску подставить по необходимости):
- nmap -sn 192.168.0.0/24 (при блокировке ICMP файрволом можно попробовать другие варианты, например, UDP: nmap -sn -PU 192.168.0.0/24 )
- echo 192.168.0.|xargs -n1 -P0 ping -c1|grep «bytes from» (это те, кто на пинг отвечает)
Для начала убедитесь, что установлена samba. Если такой пакет присутствует и задана рабочая группа, выполните в консоли
samba должна стоять на компьютере, с которого идет поиск. На разыскиваемых можно посмотреть, отктрыт ли порт 139 tcp.
Сканируйте сеть, проверяйте открыт ли порт. Я привел в ответе вариант для обычной одноранговой сети. Должно работать как в windows (компьютеры сети)
Есть очень удобная утилитка fping http://fping.org/ Прямо-таки для этого создана. Можно nmap , но это будет гораздо медленнее.
Как и nmblookup он требует, чтобы на компьютерах была установлена соответствующая служба, для linux это avahi-daemon . (С нашими тупыми провайдерами рекомендую всегда отключать проверку на использование домена .local: в /etc/default/avahi-daemon поставить AVAHI_DAEMON_DETECT_LOCAL=0 )
Чтобы компьютер с linux отвечал на это, нужно сделать на нём:
# sysctl net.ipv4.icmp_echo_ignore_broadcasts=0
Некоторые маршрутизаторы это так же поддерживают.
Ну и более низкоуровневый и как мне кажется более надёжный для односегментной сети:
$ echo 192.168.2. | xargs -n1 -P0 arping -c 4 -f -I eth0 | grep "reply from"
How to see all computers connected to a network
I am in a LAN and there are 3 Ubuntu, 2 Kubuntu, 2 Windows XP and 2 Windows 7. What commands or tools are available to see what PCs are connected to the LAN that it shows the name of the PC and the IP. Similar to tools like Angry IP that show all PCs in a LAN. Note that I do not know the IPs or names of the computers connected to the LAN. So the tool or command should look for them to.
9 Answers 9
Arp-scan works great for me too.
sudo arp-scan -l --interface=wlan0
sudo arp-scan -l --interface=eth0
(this last is practically identical to what Rajesh Rajendran posted; the -l standing for —localnet)
If you don’t have arp-scan (it doesn’t come with Ubuntu by default), just pull up a terminal and type:
sudo apt-get install arp-scan
If this doesn’t work use ifconfig to get a list of interfaces and try switching eth0 to something else.
It’s not showing any IPs for me. sudo arp-scan -l —interface=wlp4s0 Interface: wlp4s0, datalink type: EN10MB (Ethernet) Starting arp-scan 1.9.5 with 256 hosts 14 packets received by filter, 0 packets dropped by kernel Ending arp-scan 1.9.5: 256 hosts scanned in 1.975 seconds (129.62 hosts/sec). 0 responded
for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip>/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; done
But for a great tool, Nmap. Great for mapping networks.
I always use nmap. To scan for all devices in your network, use:
It is a great tool to know about. You may want to install nmap using:
sudo apt-get install nmap if you are using Debian or
sudo pacman -S nmap if you are using Arch.
As a possible GUI option, the best one I have seen is Angry IP as found in http://angryip.org/download/#linux
Simply download the latest DEB package and install. Then run ipscan from Dash. Here is a screenshot:
it is really good, I added all fetchers to the list columns, what helped most were hostname and macvendor, now everything connected to my wifi is more understandable, thx!
@JeffWard menu: tools/fetchers//availableFetchers//»lastItemOnTheList», then sort by macvendor, it is a short name of the hardware like D-Link
arp
Address HWtype HWaddress Flags Mask Iface iPhone-von-me.fritz.box ether 12:55:05:30:3c:df C wlp3s0 android-abcdefghijklmno ether 11:66:3f:71:04:d6 C wlp3s0 fritz.box ether 00:11:3f:46:37:c2 C wlp3s0 Blupiblu.fritz.box ether 71:88:cc:bb:dc:a6 C wlp3s0
ip neigh
ip neigh and hosts . NO nmap / sudo required.
Building on this, you can build a Python script:
#!/usr/bin/env python """List all hosts with their IP adress of the current network.""" import os out = os.popen('ip neigh').read().splitlines() for i, line in enumerate(out, start=1): ip = line.split(' ')[0] h = os.popen('host <>'.format(ip)).read() hostname = h.split(' ')[-1] print("3>: <> (<>)".format(i, hostname.strip(), ip))
wget https://gist.githubusercontent.com/MartinThoma/699ae445b8a08b5afd16f7d6f5e5d0f8/raw/577fc32b57a7f9e66fdc9be60e7e498bbec7951a/neighbors.py
If broadcast isn’t disabled on your router.
You can ping the broadcast address.
Will broadcast the ping command to every host within the 192.168.0/24 subnet.
Note: It’s probably a good idea to keep broadcasting turned off though as that’s how hackers can exploit a network using a DDOS Smurf attack. Basically, ping the broadcast address with a packet that has a spoofed destination address (ie the ip address of the victim). There’s a little more to it than that but that’s what Google is for.
Note: The same also works on Windows but you ping the actual broadcast address (not the subnet).