ifconfig
FreeBSD ve OpenBSD olarak işletim sistemleri üzerinde komuta işletim sisteminin geri kalan doğrultusunda güncellendi. Günümüzde, bu işletim sistemlerinde her türlü ağ arabirimi ayarını yapılandırabilir ve bir dizi ağ protokolünü yönetebilir. BSD'ler ioctl()
bu şeyleri destekliyor.
Bu Linux dünyasında olmadı. Bugün, üç ifconfig
komut var:
ifconfig
dan GNU inetutilsjdebp% inetutils-ifconfig -l
enp14s0 enp15s0 lo
jdebp% inetutils-ifconfig lo
lo Bağlantı encap: Yerel Geri Döngü
inet addr: 127.0.0.1 Yayın: 0.0.0.0 Maske: 255.0.0.0
UP LOOPBACK ÇALIŞMA MTU: 65536 Metrik: 1
RX paketleri: 9087 hataları: 0 bırakıldı: 0 aşıldı: 0 çerçeve: 0
TX paketleri: 9087 hataları: 0 düştü: 0 taşma: 0 taşıyıcı: 0
çarpışmalar: 0 txqueuelen: 1000
RX bayt: 51214341 TX bayt: 51214341
% jdebp
-
ifconfig
dan NET-3 net-araçları jdebp% ifconfig -l
ifconfig: option --help 'kullanım bilgisi verir.-l' not recognised.
ifconfig:
jdebp% ifconfig lo
lo: bayraklar = 73 <YUKARI, LOOPBACK, RUNNING> mtu 65536
127.0.0.1 ağ maskesini 255.0.0.0
inet6 :: 1 ön ek 128 kapsamı 0x10 <host>
inet6 :: 2 ön ek 128 kapsamı 0x80 <compat, global>
inet6 fe80 :: prefixlen 10 kapsamı 0x20 <bağlantı>
loop txqueuelen 1000 (Yerel Geridöngü)
RX paketleri 9087 bayt 51214341 (48,8 MiB)
RX hataları 0 düştü 0
TX87 9087 by 51214341 paketleri (48,8 MiB)
TX hataları 0 düştü 0 aşıldı 0 taşıyıcı 0 çarpışma 0
% jdebp
-
ifconfig
nosh araç setinden (sürüm 1.40) jdebp% ifconfig -l
enp14s0 enp15s0 lo
jdebp% ifconfig lo
bak
çalışan geridöngü bağla
bağlantı adresi 00: 00: 00: 00: 00: 00 bdaddr 00: 00: 00: 00: 00: 00
inet4 adresi 127.0.0.1 ön eki 8 bdaddr 127.0.0.1
inet4 adresi 127.53.0.1 prefixlen 8 bdaddr 127.255.255.255
inet6 address :: 2 kapsamı 0 öneki 128
inet6 adresi fe80 :: kapsam 1 öneki 10
inet6 address :: 1 kapsam 0 öneki 128
jdebp% sudo ifconfig lo inet4 127.1.0.2 takma adı
jdebp% sudo ifconfig lo inet6 :: 3/128 diğer adı
jdebp% ifconfig lo
bak
çalışan geridöngü bağla
bağlantı adresi 00: 00: 00: 00: 00: 00 bdaddr 00: 00: 00: 00: 00: 00
inet4 adresi 127.0.0.1 ön eki 8 bdaddr 127.0.0.1
inet4 adresi 127.1.0.2 prefixlen 32 bdaddr 127.1.0.2
inet4 adresi 127.53.0.1 prefixlen 8 bdaddr 127.255.255.255
inet6 address :: 3 kapsamı 0 öneki 128
inet6 address :: 2 kapsamı 0 öneki 128
inet6 adresi fe80 :: kapsam 1 öneki 10
inet6 address :: 1 kapsam 0 öneki 128
% jdebp
Gördüğünüz gibi, GNU girişleri ve NET-3 ağ araçları ifconfig
, IPv6 ile ilgili olarak, birden fazla adrese sahip arayüzlere ve benzer fonksiyonlara ilişkin bazı belirgin eksikliklere sahiptir -l
.
IPv6 sorunu kısmen araçların kendisinde bazı eksik kodlardır. Fakat asıl olarak, Linux'un (diğer işletim sistemlerinin yaptığı gibi) ioctl()
arabirim aracılığıyla IPv6 işlevselliği sağlamadığı gerçeğinden kaynaklanmaktadır . Yalnızca programların IPv4 adreslerini ağlar üzerinden görmesini ve değiştirmesini sağlar ioctl()
.
Linux bunun yerine bu işlevselliği farklı bir arabirim aracılığıyla send()
ve recv()
özel ve biraz tuhaf bir adres ailesi soketinde sunar AF_NETLINK
.
GNU ve NET-3 ifconfig
ler olabilir , bu yeni API kullanmak üzere ayarlanmıştır. Bunu yaparken karşı argüman diğer işletim sistemlerine portatif olmadığını, ancak bu programlar pratikte vardı zaten taşınabilir değil zaten bu kadar bir argüman değildi.
Ancak düzeltilmediler ve bugüne kadar gösterildiği gibi kaldılar. (Bazı insanlar onlar üzerinde yıllar boyunca çeşitli noktalarda çalıştılar, ancak söylenen üzücü gelişmeler hiçbir zaman programlara dahil edilmedi. Örneğin: Bernd Eckenfels , NET-3 ağ araçlarına bazı netlink API özelliği ekleyen bir yamayı kabul etmedi. ifconfig
, Yamanın yazıldığından 4 yıl sonra.)
Bunun yerine, bazı insanlar araç setini ip
, yeni Linux API'sini kullanan, farklı bir sözdizimine sahip bir komut olarak tamamen yeniden icat ettiler ve modaya uygun bir arayüzün arkasında birkaç başka işlevi birleştirdiler .command subcommand
Bir ihtiyaç ifconfig
FreeBSD komut satırı sözdizimi ve çıkış tarzı vardı o ifconfig
(GNU ne de NET-3 ne ifconfig
vardır ve hangi ip
kesinlikle yoktur). Bu yüzden bir tane yazdım. ifconfig
Linux'ta netlink API'sini kullanan bir kişinin yazabileceğinin kanıtı olarak yazıyor.
Dolayısıyla, ifconfig
ne alıntı yaptığınız gibi edinilen bilgelik artık doğru değil. Öyle Şimdi yanlış olduğunu söylemek " ifconfig
netlink kullanmaz.". İkiyi örten battaniye üçü kapsamaz.
Her zaman "netlink'in daha verimli olduğunu" söylemek yanlış olmuştur . Birinin yaptığı işlerde ifconfig
netlink API ve API arasında verimlilik söz konusu olduğunda çok fazla bir şey yok ioctl()
. Biri, verilen herhangi bir görev için hemen hemen aynı sayıda API çağrısını yapar.
Gerçekten de, her bir API çağrısı, sistemdeki bir çağrıya göre, netlink durumunda iki sistem çağrısıdır ioctl()
. Ve tartışılabilir bir şekilde netlink API, yoğun olarak kullanılan bir sistemde, takımın API çağrısının sonucunu bildiren hiçbir zaman bir onay mesajı alma olasılığını açıkça içermemesi dezavantajına sahiptir.
Yine aynı şekilde, gerçek dışı olduğunu söylemek olan ip
GNU "daha çok yönlü" dır ve NET-3 ifconfig
ler o netlink kullanması nedeniyle . Daha çok yönlüdür çünkü daha fazla görev yapar, büyük bir programda birinin başka programlarla yapacağı şeyleri yapar ifconfig
. Bu fazladan görevleri yerine getirmek için dahili olarak kullandığı API'nin bir ifadesiyle çok yönlü değildir. API ile ilgili bu konuda hiçbir şey yoktur. Bir FreeBSD kullanılan hepsi-bir araç yazabiliriz ioctl()
bu "çok yönlü" bireysel fazla olduğunu eşit ölçüde iyi durum, örneğin, API ve ifconfig
, route
, arp
ve ndp
komutlar.
Bir yazabilirsiniz route
, arp
ve ndp
de netlink API kullanılan Linux için komutlar.
daha fazla okuma
ip
daha çok yönlü kılan şey olduğunu söylüyor , çünkü her türlü harika özellik Linux'ta ioctls kullanarak yapmak imkansızdır (çünkü ioctls orada değildir ve asla olmayacaktır).