Web sunucuları, doğrudan IP adres erişimi kullanıp kullanmadığınızı nasıl biliyorlar?


64

Bazı web sunucuları, IP adreslerini kullanarak erişildiğinde, IP adres erişimine doğrudan izin verilmeyen bir hata döndürür.

Bunun nasıl çalıştığını bir süredir merak ediyorum. Yani, tarayıcı her zaman IP adresini çözüp ona bağlanmıyor mu? "Doğrudan IP adres erişimi" sadece DNS'yi atlamak değil midir? Uzak sunucu DNS'yi atladığınızı nasıl bilebiliyor ?


2
Hatırladığım kadarıyla, gerçekte istediği şey, aynı gerçek ana bilgisayarda sanal sunucular sağlamak için http protokolüne çok erken eklendi.
JDługosz 13.03.2016

3
Temel olarak, tek bir sunucunun farklı sanal ana bilgisayarlar arasında ayrım yapmasını sağlayan işlem aynıdır. Gerçek sunucu bir URL'yi sanal ana bilgisayarlarından birine eşler. Çoğu sunucu, tasarım veya varsayılan olarak eşlenmemiş bir URL için bir geri dönüşe sahip değildir.
Manngo

DNS'yi atlayabilirsiniz ancak söz konusu etki alanı adı için hosts dosyanızda bir girdi oluşturursanız bu hatayı önleyebilirsiniz. Tarayıcınız etki alanı adını arayacak ve onu Ana Bilgisayar: başlığına dahil edecektir, ancak ana bilgisayar dosya girişi nedeniyle DNS sorgusu yapılmayacaktır.
Monty Harder,

Bu tür soruların cevabı genellikle, çünkü siz onlara söylediniz .
Thomas

Yanıtlar:


91

Nasıl bildiği hakkındaki sorunuzu yanıtlamak için , tarayıcınızın sunucuya ne gönderdiği ile ilgili olması gerekir.

Sistemin her zaman bir IP adresine çözdüğü konusunda haklısınız, ancak tarayıcı HTTP başlığında erişmeye çalıştığınız URL'yi gönderir.

İşte çevrimiçi bulduğum, Windows'ta Firefox kullanıyormuşsunuz gibi görünen apple.comve adres çubuğuna yazılan örnek bir başlık :

GET / HTTP/1.1
Host: apple.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

IP adresini kullandıysanız, başlığın nasıl görüneceği:

GET / HTTP/1.1
Host: 17.142.160.59
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

Bunların her ikisi de bir soket üzerinden aynı IP adresine gönderilir, ancak tarayıcı sunucuya ne eriştiğini bildirir.

Neden? Çünkü aynı IP adresine sahip web sunucuları birden fazla siteyi barındırabilir ve her biri için farklı sayfalar verebilir. Hangi sayfanın IP adresine göre kimin istediğini ayırt edemez, çünkü hepsinde de aynıdır - ancak bunları HTTP üstbilgisiyle ayırabilir.


7
Ahh, şimdi çok daha mantıklı! Temel olarak, tarayıcı IP’ye IP’yi veya etki alanıyla birlikte başlığı IP’ye gönderir ve site bununla ilgili varsayımını yapar. Yani gerçekten, bu kısıtlamalar atlamak kolaydır?
Joseph A.,

7
Bu, atladığınız bir kısıtlama değildir, sadece top oynamamanız ve bazı garip sonuçlar elde etmeniz gerekir.
iJademi,

Bu HTTP istekleri, bir proxy kullanıyorsanız ne alacağınızdır. Proxy olmadan, bilgi hostbaşlıkta gelir . Bu örneğe bakınız .
0xFE

2
bytec0de: Bunun bir diğer kısmı da web sunucusu yapılandırmalarının çoğu zaman ana bilgisayar adına bağlı olarak ayarlanmasıdır. IP paketi IP adresini, TCP segmenti port numarasını ve HTTP başlığı ise ana bilgisayar adını belirtir. Sıklıkla sunucular, "eğer müşteri / tarayıcı example.com için sorarsa, onlara bunu ver" diyecek şekilde yapılandırılmıştır. Ayrıca IP adreslerine veya joker karakterlere (herhangi bir şeye yanıt verir) yanıt verecek şekilde de ayarlanabilir, ancak birçok kişi yalnızca örnekleri kopyalar ve önceden var olan birçok örnek, tarayıcı tarafından sağlanan etki alanı adını temel alır.
TOOGAM

14
@ bytec0de Bu bir kısıtlama değil . Doğru telefon numarasını kullanmak gibi, fakat yanlış dahili numara - doğru yapıyı aradınız, ancak doğru kişiyi aramadınız. Ve tanıtımının nedeni de telefonlarla aynıdır - aynı IP adresinde (ve TCP bağlantı noktasında) birden fazla siteyi barındırmanıza izin verir. Örneğin, geliştirme sunucumuz aynı anda yüzlerce ayrı web sitesine ev sahipliği yaptı ve pek çok web barındırma çözümü aynı yaklaşımı kullanıyor ("bir etki alanı kaydettirin, IP adresimize doğrultun, gerisini biz hallederiz") .
Luaan

21

HTTP 1.1 protokolü (önceki HTTP 1.0 sürümü oldukça uzun bir süredir kullanılmıyor, bu nedenle tarayıcının yakın bir sürümü tarafından kullanılması pek mümkün değil), hostbaşlık tanıtıldı. İçin HTTP 1.1 bir tarayıcı tarafından verilmiş olmalıdır gerekli bir başlık satırı olduğu . Etki alanı adı tarayıcı tarafından bu satırda yer almaktadır, örn Host: example.com. Böylece web sunucusu, tarayıcının bu hattan hangi web sitesine erişmek istediğini bilir. Bir web sunucusu düzinelerce web sitesini destekleyebileceğinden, bu sayfa istenen sayfanın hangi web sitesinde bulunduğunu belirlemek için önemlidir. Tarayıcının example.com'daki bir sitenin giriş sayfasına erişmek istediğini varsayalım, sunucuya bağlandığında sunucuya şu satırı gönderir:

GET / HTTP/1.1

Bu satır, tarayıcının, web sitesi için "/" kök dokümanı almak istediğini belirtir. Erişmeye isteseydi /somedir/testpage.html, GET /somedir/testpage.html"get" doğrultusunda olacaktır. Satırı aşağıdaki satır izleyecektir:

Host: example.com

Dolayısıyla, web sunucusu example.com, someothersite.com, yetanothersite.org vb. Web sitelerini destekliyorsa, example.com için ana sayfayı döndürmesi gerektiğini bilir. Bu satırı alamazsa veya satırda listelenen bir etki alanı adı Hostyoksa, hangi web sitesinin ana sayfasının döndürülmesi gerektiğini bilmez. Bu nedenle bir hata mesajı verebilir veya sunucu için "varsayılan" bir sitenin giriş sayfasını döndürür.

Varsayılan tarayıcıya bağlantı noktası 80'i bağlamak için , örneğin bir Linux kabuk isteminden veya bir Apple OS X Terminal penceresinden telnet protokolünü kullanarak bir tarayıcıyla aynı komutları verebilirsiniz , bağlantı noktası 80 - bkz . Adımlar için PuTTY kullanarak bir web sitesine erişimi test etme PuTTY ile bir Windows sisteminde yapmak için.telnet example.com 80


3
Sadece bir not: ana bilgisayar üstbilgisi HTTP 1.0'da da kullanılıyordu, sadece gerekli değildi . HTTP 1.1, alanı zorunlu kıldı. Uygulamada, pek çok HTTP 1.0 sunucusu tarayıcı ana bilgisayar başlığını göndermediyse işe yaramadı (yukarıda belirtilen tüm nedenlerden dolayı), bu nedenle çoğu tarayıcı yine de gönderdi.
Luaan

6

Bu, Host:HTTP başlığından kaynaklanıyor. Bu, aynı IP adresinde birden fazla siteyi barındırmak için oldukça kullanışlıdır. Örneğin, http://www.k7dxs.net/ ve http://www.philipgrimes.com/ her ikisi de aynı IP adresindedir. Ancak, Host:başlık nedeniyle, iki farklı site gösterebilirler.

HTTPS için, @Toothbrush'ın işaret ettiği gibi, Ana Bilgisayar üstbilgisi şifreli isteğin bir parçası olduğundan ve sunucu bu olmadan hangi sertifikanın sunulacağını bilmediğinden, TLS Sunucu Adı Göstergesini kullanırlar.

Eğlenceli deneme: Firefox için Sabotaj Verileri edinin (Chrome için bir eşdeğer bulamadım) ve kurcalamaya başlayın. Http://slipstation.com/ adresini açın ve Host:başlığı http://www.zombo.com/ olma isteğinde düzenleyin . Her şeyin mümkün olduğu bilinen bir web sitesini göreceksiniz.


Aslında, bu siteler Sunucu Adı Göstergesini kullanır . Hangi sitenin kullanılacağını bilmediğinden, her iki sitenin de SNI olmadan HTTPS üzerinden aynı sunucuda barındırılıyorsa hangi sitenin gösterileceğini anlamanın bir yolu yoktur.
Diş fırçası

Oh ilginç. Denemem devam edecek mi?
Duncan X Simpson

Evet, HTTP üzerinden aynı IP adresinde barındırılan iki site bulursanız.
Diş fırçası

Ama sorduğum HTTPS değil.
Duncan X Simpson

Hayır, HTTPS üzerinden çalışmamalı. Varsa, web sunucusunda bir güvenlik açığı vardır.
Diş fırçası

5

Web sunucusu yalnızca belirli bir etki alanına veya alt etki alanına yapılan bağlantıları kabul edecek şekilde yapılandırılabilir. Birden çok etki alanı barındırıyor olabilir.

Doğrudan bir IP adresi kullanıldığında web sunucusunun yaptığı şey yapılandırılabilir. Apache durumunda, varsayılan olarak, alfa sayısal olarak sıralanan etkin sitelerden ilk adı verilen vhost'a gider.

Hızlı bir aramadan sonra bulduğum Apache belgelerinin en alakalı kısmı:

https://httpd.apache.org/docs/current/vhosts/name-based.html

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.