(być może będziesz musiał zainstalować pakiet ip
na openwrt (v12 / dostosowanie postawy)
ifconfig / netstat itp. są uważane za przestarzałe , więc powinieneś użyć (jako root)
ss -nlput | grep sshd
aby pokazać gniazda TCP / UDP, na których sshd
nasłuchuje uruchomiony program zawierający ciąg
-n
brak portu do rozpoznawania nazw
-l
tylko gniazda nasłuchowe
-p
pokaż procesy słuchania
-u
pokaż gniazda udp
-t
pokaż gniazda TCP
Następnie twórz listę taką jak ta:
tcp LISTEN 0 128 *:22 *:* users:(("sshd",3907,4))
tcp LISTEN 0 128 :::22 :::* users:(("sshd",3907,3))
tcp LISTEN 0 128 127.0.0.1:6010 *:* users:(("sshd",4818,9))
tcp LISTEN 0 128 ::1:6010 :::* users:(("sshd",4818,8))
Interesującą rzeczą jest piąta kolumna, która pokazuje kombinację adresu IP i portu:
*:22
nasłuchuj na porcie 22 na każdym dostępnym adresie IPv4
:::22
nasłuchuj na porcie 22 na każdym dostępnym adresie IP (nie piszę IPv6, ponieważ IP to IPv6 zgodnie z RFC 6540 )
127.0.0.1:6010
nasłuchuj na adresie IPv4 127.0.0.1 (localhost / loopback) i porcie 6010
::1:6010
nasłuchuj na adresie IP :: 1 (0: 0: 0: 0: 0: 0: 0: 1 w pełnej notacji, również localhost / loopback) i port 6010
Następnie chcesz wiedzieć, które interfejsy mają adres IPv4 (do pokrycia 1.)
ip -4 a
# or "ip -4 address"
# or "ip -4 address show"
lub adres IP (do pokrycia 2.)
ip -6 a
# or "ip -6 address
# or "ip -6 address show
(jeśli nie dodasz opcji dla adresu IP (-6
) lub IPv4 ( -4
), oba zostaną wyświetlone)
Możesz także wyglądać tak, aby wyświetlać i wyszukiwać np. 127.0.0.1
Dowolny inny adres IP / IPv4
# here a demo where i show all addresses of the device "lo" (loopback)
ip a show dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
Linie zaczynające się od inet
i inet6
pokazują, że te adresy IP są powiązane z tym interfejsem, możesz mieć wiele z tych linii na interfejs:
he-ipv6: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN
link/sit 192.0.2.1 peer 192.0.2.3
inet6 2001:db8:12::1/64 scope global
valid_lft forever preferred_lft forever
inet6 2001:db8::2/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::1111:1111/128 scope link
valid_lft forever preferred_lft forever
i w skrypcie:
address="127.0.0.1"
for i in $(grep ':' /proc/net/dev | cut -d ':' -f 1 | tr -d ' ') ; do
if $(ip address show dev $i | grep -q "${address}") ; then
echo "${address} found on interface ${i}"
fi
done
(zastąp „127.0.0.1”)
Używając
lsof
(jako root):iproute2
teżss
może to zrobić (jako root):... i wreszcie
netstat
(jako root):źródło
*:ssh
czy0.0.0.0:22
oznacza to, że słucha na interfejsie wieloznacznego (czyli wszystkie z nich). Coś w styluhost-eth1:ssh
lub10.0.0.4:22
oznacza, że nasłuchuje na tym konkretnym interfejsie192.168.1.5
luba.lan
w twoim pytaniu). Jeśli jest*
w tym miejscu, nasłuchuje na wszystkich interfejsach (*:ssh
w odpowiedzi sr_).O ile wiem, nie możesz (z wyjątkiem systemów BSD, w których rozwiązanie Finkregha działa dobrze). Może to być możliwe, ale nie obchodzi cię to, ponieważ większość aplikacji nasłuchuje na każdym interfejsie, nawet jeśli jest powiązany z adresem IP.
W systemie Linux (i openwrt) jedynym sposobem, aby aplikacja nasłuchiwała tylko na określonym interfejsie, jest
SO_BINDTODEVICE
opcja gniazda. Niewiele aplikacji faktycznie to obsługuje, ponieważ jest to specyficzne dla systemu operacyjnego. To lub używają gniazda pakietowego, ale dotyczy to protokołów niskiego poziomu (takich jak serwery dhcp).W systemie Linux, który korzysta ze słabego modelu hosta, każda aplikacja domyślnie nasłuchuje na każdym interfejsie, nawet po powiązaniu gniazda z adresem IP. Jedynym wyjątkiem jest powiązanie z 127.0.0.1, co zapewnia, że aplikacja nasłuchuje tylko w sieci
lo
interfejsie.Dobrze słyszałeś: jeśli masz dwa interfejsy (powiedz
eth0
ieth1
) z dwoma różnymi adresami IP (powiedzmy 192.0.2.1 dlaeth0
i 198.51.100.1 dlaeth1
) i powiesz aplikacji, aby powiązała 192.0.2.1, aplikacja będzie nadal nasłuchiwać oba interfejsy, ale odpowiedzą tylko, jeśli docelowy adres IP to 192.0.2.1. Tak więc ktoś weth1
interfejsie, jeśli jego tabela routingu jest odpowiednio zdefiniowana, może uzyskać dostęp do Twojej aplikacji, uzyskując do niej dostęp za pośrednictwem adresu 192.0.2.1 (ale nie poprzez 198.51.100.1) naeth1
interfejsie.Zakładanie, że wiązanie z adresem IP jest takie samo, jak wiązanie z interfejsem sieciowym, jest całkowicie fałszywe w systemie Linux. Jeśli Ci to przeszkadza, użyj routingu zasad i / lub
iptables
.źródło
Także z netstat, ale konkretnymi argumentami są:
źródło
man netstat
. Sugeruję różnicę w zmianie „zapytania”, które uruchamiasz, aby jawnie określić interfejs, który chcesz sprawdzić.netstat -i
wyświetli listę interfejsów, nie nasłuchujących portów, -1 za odpowiedź, która nie odzwierciedla rzeczywistości