Bagaimana cara memeriksa alamat IP publik yang valid?

39

Pertimbangkan daftar alamat IP yang disediakan oleh header X-Forwarded-For HTTP :

10.0.0.142, 192.168.0.10, 212.43.234.12, 54.23.66.43

Saya ingin tahu yang merupakan alamat yang dapat diakses publik pertama dalam daftar itu. Saya bisa melihat mereka dengan cukup mudah, tetapi bagaimana saya bisa tahu mana yang dapat diakses publik? Bagi saya (mata saya yang tidak terlatih) 10.0.0.142adalah workstation, 192.168.0.10proxy internal, dan 212.43.234.12alamat yang dapat diakses publik diteruskan melalui proxy di 54.23.66.43. Apakah ada cara untuk menghitung ini dalam kode?

Intuisi pertama saya adalah bahwa alamat yang diawali dengan 10.atau 192.tidak dapat diakses oleh publik, tetapi http://simplesniff.com mengungkapkan alamat IP rumah saya 192.117.111.61. Apakah ada rumus untuk menentukan alamat mana yang publik dan yang dilindungi undang-undang? Perhatikan bahwa bahkan mencoba melakukan ping ke server yang dimaksud mungkin tidak membantu karena beberapa server tidak akan menanggapi ping, dan mungkin juga ada alamat di jaringan lokal saya yang juga cocok dengan alamat internal.

dotancohen
sumber
3
Saya juga akan menunjukkan bahwa bahkan jika Anda menemukan alamat dapat dirutekan, beberapa perusahaan menyalahgunakan ruang alamat publik secara internal. Saya memiliki pengetahuan langsung tentang nama perusahaan yang sangat besar dan terkenal yang secara tidak dapat dijelaskan menggunakan ruang AFRINIC dan AT&T IPv4 pada jaringan internal perusahaan mereka alih-alih ruang RFC1918 ... mereka proksi semua lalu lintas HTTP ... dan X-Forwarded -Untuk header dari jaringan perusahaan mereka akan menunjukkan ruang publik yang sebenarnya tidak mereka miliki.
Mike Pennington
@MikePennington pengalaman langsung dari ini juga, kecuali mereka menggunakan nomor APNIC. Bisa juga menyebabkan masalah ketika mesin internal (terutama yang menemukan tujuan berada di subnet mereka) mencoba mengakses salah satu server publik ...
emynd
@MikePennington - untuk jaringan pribadi menggunakan alamat IPv4 puplic yang sebenarnya digunakan di luar jaringan pribadi (yaitu: internet), bagaimana seseorang di dalam jaringan pribadi mencapai situs publik dengan alamat IP dalam rentang yang sama? Bukankah permintaan itu akan dialihkan ke beberapa komputer (bahkan mungkin komputer mereka sendiri) dalam jaringan pribadi?
Kevin Fegan
Memercayai x-forwarded-for secara buta adalah ide yang buruk . Sepele bagi setiap pelaku untuk menetapkan header x-forwarded-for palsu yang mengklaim alamat yang mereka inginkan.
Peter Green

Jawaban:

24

RFC 1918 mendefinisikan rentang alamat IP pribadi. Silahkan lihat di sini.

Dari dokumen itu:

  1. Ruang Alamat Pribadi

    Internet Assigned Numbers Authority (IANA) telah mencadangkan tiga blok ruang alamat IP berikut untuk internet pribadi:

    10.0.0.0 - 10.255.255.255 (awalan 10/8)

    172.16.0.0 - 172.31.255.255 (awalan 172.16 / 12)

    192.168.0.0 - 192.168.255.255 (awalan 192.168 / 16)

GerryEgan
sumber
Terima kasih. Saya merasa menarik bahwa 127.0.0.0/16(dan mungkin lebih) tidak ada dalam daftar itu.
dotancohen
5
localhost didefinisikan dalam tools.ietf.org/html/rfc6761
Darryl Braaten
4
@dotancohen: Blok loopback adalah / 8, bukan / 16 dan tidak ada dalam daftar itu karena itu bukan ruang alamat pribadi.
Blrfl
@ Blrfl: Terima kasih, saya tidak yakin seberapa lebar blok loopback itu. Saya sebenarnya tidak mencari untuk mengidentifikasi alamat pribadi melainkan alamat non-publik (bagian yang bersifat pribadi). Selain dari alamat RFC 1918/6890 dan ruang 127.0.0.0/8, apakah ada alamat lain yang jelas non-publik yang mungkin ditemui?
dotancohen
1
en.wikipedia.org/wiki/… 240.0.0.0 - 254.255.255.254 (240.0.0.0/4 dan 255.0.0.0/8)
David Houde
37

Selain ruang RFC 1918 asli (yang sekarang diperbarui ke RFC6890 ), ada beberapa blok lain seperti 192.0.2.0 yang tidak diumumkan secara publik. Selain itu, mungkin saja seseorang memiliki ruang IPv4 yang valid yang tidak diumumkan di internet publik.

Hal paling sederhana untuk dilakukan adalah telnet route-views.oregon-ix.net, login sebagai rviewsdan cari sendiri ... misalnya, ini adalah ruang "192" yang diumumkan oleh AS7018 (AT&T) ...

route-views>sh ip route 192.199.1.0
Routing entry for 192.199.1.0/24
  Known via "bgp 6447", distance 20, metric 0
  Tag 7018, type external
  Last update from 12.0.1.63 3w1d ago
  Routing Descriptor Blocks:
  * 12.0.1.63, from 12.0.1.63, 3w1d ago
      Route metric is 0, traffic share count is 1
      AS Hops 2
      Route tag 7018

route-views>

Di sisi lain, Anda akan melihat bahwa 192.0.2.0/24 (ref RFC6890 ) tidak ditemukan di mana pun ...

route-views>sh ip route 192.0.2.0 255.255.255.0
% Subnet not in table
route-views>

Juga tidak 169.254.0.0/16 (atau lebih lama) ...

route-views>sh ip route 169.254.0.0 255.255.0.0 longer
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is 128.223.51.1 to network 0.0.0.0

route-views>
Mike Pennington
sumber
1
RFC 1918 belum diperbarui oleh (atau ke) RFC 6890. RFC 6890 hanya " menegaskan kembali penugasan blok alamat IPv4 (192.0.0.0/24) untuk IANA. Ia juga memerintahkan IANA untuk merestrukturisasi IPv4 dan IPv6 Alamat Tujuan Khususnya. Registries. "Itu tidak memperbarui Entri Pendaftaran Alamat Khusus Tujuan IPv4 untuk Penggunaan Pribadi dan blok alamat IPv4 192.0.0.0/24 dikategorikan sebagai" Penugasan Protokol IETF . "
one.time
2
@ one.time, RFC 6890 berisi superset dari ruang alamat yang disediakan di RFC 1918. Saya tidak tahu mengapa Anda berbicara tentang 192.0.0.0/24; mungkin Anda harus membaca kembali jawaban saya lebih dekat :-)
Mike Pennington
blok IPv4 192.0.0.0/24 adalah poin pembicaraan utama RFC 6890 jadi saya membuat referensi untuk ukuran yang baik dan perbandingan dengan RFC 1918. "Selain ruang RFC 1918 asli (yang sekarang diperbarui ke RFC6890)" adalah apa memicu keingintahuan saya ketika membaca posting Anda. Selain dari pembaruan ke entri registri alamat tujuan khusus untuk IPv4 dan IPv6 untuk dimasukkannya 192.0.0.0.24, RFC 6890 bukan pembaruan untuk RFC 1918. Saya hanya ingin memberikan pengamatan mengenai keakuratan pernyataan tersebut. HTHs ;-)
one.time
5
@ one.time, biasanya RFC 6890 bukanlah pembaruan untuk RFC 1918. Secara fungsional, seseorang harus menggunakan RFC 6890 alih-alih RFC 1918 ketika mempertimbangkan ruang IP yang valid dalam tabel BGP publik ...
Mike Pennington
13

Team Cymru menyediakan referensi bogon untuk IPv4 dan IPv6 yang dapat Anda gunakan untuk memfilter alamat IP yang tidak ditugaskan / dicadangkan / pribadi - itu ditawarkan baik sebagai daftar sederhana untuk awalan terkenal dan juga dalam daftar yang jauh lebih besar yang mencakup ruang yang yang belum ditugaskan oleh RIR.

Mereka juga menjalankan server bogon BGP dimana Anda dapat meminta peering gratis - tidak ternilai jika Anda tidak dapat menjalankan zona bebas-standar ke internet.

Olipro
sumber
2
Terus terang 'tidak ditetapkan' adalah sesuatu yang tidak berguna untuk difilter, memfilternya menyebabkan lebih banyak masalah daripada menyelesaikannya. Dan sebenarnya bogon mudah, karena sangat stabil / statis.
ytti
2
OK, kalau begitu jangan gunakan itu, Seperti yang saya katakan, mereka menawarkan berbagai rasa.
Olipro
2

Ada sejumlah rentang yang dicadangkan untuk berbagai kasus penggunaan. IANA memiliki daftar otoritatif dan komprehensif . Ini termasuk RFC1918, RFC6761 serta pemesanan yang lebih baru seperti blok 100,64 / 10 CGN. Jika Anda menemukan alamat di sana, mereka kemungkinan entah bagaimana digunakan dalam jaringan pribadi dan harus dibuang demi yang lain untuk mencari alamat publik pertama.

kll
sumber