(Anda mungkin harus menginstal paket ip
pada openwrt (penyesuaian v12 / sikap)
ifconfig / netstat dll. dianggap usang , jadi Anda harus menggunakan (sebagai root)
ss -nlput | grep sshd
untuk menunjukkan soket TCP / UDP yang sshd
didengarkan program yang berisi string
-n
tidak ada port ke resolusi nama
-l
hanya mendengarkan soket
-p
perlihatkan proses mendengarkan
-u
tunjukkan soket udp
-t
tampilkan soket tcp
Maka Anda dapat daftar seperti ini:
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))
yang menarik adalah kolom ke-5 yang menunjukkan kombinasi alamat IP dan port:
*:22
dengarkan pada port 22 pada setiap alamat IPv4 yang tersedia
:::22
dengarkan pada port 22 pada setiap alamat IP yang tersedia (saya tidak menulis IPv6, karena IP adalah IPv6 per RFC 6540 )
127.0.0.1:6010
dengarkan alamat IPv4 127.0.0.1 (localhost / loopback) dan port 6010
::1:6010
dengarkan alamat IP :: 1 (0: 0: 0: 0: 0: 0: 0: 0: 0: 1 dalam notasi penuh, juga localhost / loopback) dan port 6010
Anda kemudian ingin tahu antarmuka mana yang memiliki alamat IPv4 (untuk menutup 1.)
ip -4 a
# or "ip -4 address"
# or "ip -4 address show"
atau alamat IP (untuk menutup 2.)
ip -6 a
# or "ip -6 address
# or "ip -6 address show
(jika Anda tidak menambahkan opsi untuk IP ( -6
) atau IPv4 ( -4
) keduanya ditampilkan)
Anda juga dapat melihat output dan mencari misalnya 127.0.0.1
atau alamat IP / IPv4 lainnya
# 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
Baris yang dimulai dengan inet
dan inet6
menunjukkan bahwa IP ini terikat ke antarmuka ini, Anda mungkin memiliki banyak baris ini per antarmuka:
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
dan dalam naskah:
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
(ganti "127.0.0.1")
Menggunakan
lsof
(sebagai root):iproute2
'sss
dapat melakukan hal ini, juga (sebagai root):... dan akhirnya,
netstat
(sebagai root):sumber
*:ssh
atau0.0.0.0:22
berarti mendengarkan pada antarmuka wildcard (yaitu, semuanya). Sesuatu sepertihost-eth1:ssh
atau10.0.0.4:22
berarti sedang mendengarkan pada antarmuka spesifik itu192.168.1.5
ataua.lan
dalam pertanyaan Anda). Jika ada*
di tempat ini, maka ia mendengarkan semua antarmuka (*:ssh
dalam jawaban sr_).Sejauh yang saya tahu, Anda tidak bisa (kecuali pada sistem BSD, di mana solusi Finkregh berfungsi dengan baik). Mungkin saja tetapi Anda tidak peduli, karena sebagian besar aplikasi mendengarkan di setiap antarmuka, bahkan ketika terikat ke alamat IP.
Di linux (dan openwrt), satu-satunya cara aplikasi mendengarkan hanya pada antarmuka tertentu adalah
SO_BINDTODEVICE
opsi soket. Hanya sedikit aplikasi yang benar-benar mendukung ini, karena spesifik untuk OS. Itu, atau mereka menggunakan soket paket, tapi itu untuk protokol tingkat rendah (seperti server dhcp).Di linux, yang menggunakan model host yang lemah, setiap aplikasi mendengarkan pada setiap antarmuka secara default, bahkan ketika mengikat soket ke alamat IP. Satu-satunya pengecualian adalah ketika mengikat ke 127.0.0.1, yang memastikan bahwa aplikasi hanya mendengarkan pada
lo
antarmuka.Anda mendengarnya dengan benar: Jika Anda memiliki dua antarmuka (katakan
eth0
daneth1
) dengan dua alamat IP yang berbeda, (katakanlah 192.0.2.1 untuketh0
dan 198.51.100.1 untuketh1
) dan Anda memberi tahu aplikasi untuk mengikat 192.0.2.1, aplikasi akan tetap mendengarkan di kedua antarmuka, tetapi hanya akan merespons jika IP tujuan 192.0.2.1. Jadi seseorang dieth1
antarmuka, jika tabel peruteannya ditentukan dengan tepat, dapat mengakses aplikasi Anda dengan mengaksesnya melalui alamat 192.0.2.1 (tetapi tidak melalui 198.51.100.1) padaeth1
antarmuka.Dengan asumsi bahwa pengikatan ke alamat IP sama dengan pengikatan ke antarmuka jaringan sama sekali salah di Linux. Jika itu mengganggu Anda, gunakan perutean kebijakan dan / atau
iptables
.sumber
Juga dengan netstat tetapi argumen spesifiknya adalah:
sumber
man netstat
. Perbedaan yang saya sarankan adalah dalam mengubah "kueri" yang Anda jalankan untuk secara eksplisit menentukan antarmuka yang ingin Anda periksa.netstat -i
akan mencantumkan antarmuka, bukan port mendengarkan, -1 untuk jawaban yang tidak mencerminkan kenyataan