Çevrimdışı olduğunda sahte çevrimiçi web sitesi


15

Yerel bir sunucu kullanarak bir web sitesi geliştiriyorum, ancak uzak bağımlılıklarım var. Uzak sunuculardaki dosyalar için sahte isteklerde bulunmak istiyorum. Örneğin, tarayıcı fooCDN.com/bloatedLib.jsiçeriği için bir istekte bulunduğunda /Users/name/Desktop/bloatedLib.jsiade edilecektir.

Bir mac kullanıyorum ve sistem veya tarayıcı düzeyinde çalışan bir çözüm iyi olurdu. Tarayıcı düzeyinde çalışırsa, yalnızca bir Firefox veya Chrome çözümü uygundur. Windows bilgisayar kullanamıyorum.


Bir Windows bilgisayarı kullanabiliyor musunuz?
geek1011

@ geek1011 Hayır, bu mümkün olmaz
Daniel F

5
Sizi doğru anladığımdan emin değilim, ancak internet bağlantınız olmasa bile bir web sitesine erişmeye çalışıyor musunuz? ve eğer öyleyse, yerel bir kopyaya erişilsin mi? Proxy sunucusu gibi mi?
LPChip

@LPChip Çevrimdışıyken bile yüklenmek için jQuery gibi harici bağımlılıklara ihtiyacım var. Bu başkasının deposu, bu yüzden sadece dış bağımlılıkları yerel yapamam. Sürümü çevrimdışı olduğunda tarayıcı önbelleğine yükleyebilseydi ti mükemmel olurdu. Web sitesinin çoğu yerel bir sunucuda.
Daniel F

HTML5 "çevrimdışı web uygulamaları" kullanabilirsiniz
Michael

Yanıtlar:


11

Sadece eksik dosyaları indirmek için bu küçük proxy sunucusunu birlikte hackledim. / Etc / hosts dosyanızı 127.0.0.1'de önbelleğe almak istediğiniz siteleri ve 0.0.0.0'da engellemek istediğiniz siteleri işaret edecek şekilde ayarlayın

#!/bin/sh 
nc -ll -p 80 -e sh -c ' 
while read A B DUMMY 
do 
   case "$A" in 
      [Gg][Ee][Tt]) 
         FULL=$B #full path of the file
         F=${FULL##*/}
         F=${F%%\?*} #file name only
         #if we have it cat it back to browser
         [ -f "$F" ] && cat "$F" && break 
      ;; 
      [Hh][Oo][Ss][Tt]*) 
         [ -f "$F" ] && break #file already exists
         HOST=${B:0:$((${#B}-1))} #the host name
         #resolve by DNS first so we can cache it
         sed -i "s/hosts:\t\tfiles /hosts:\t\t/g" /etc/nsswitch.conf 
         wget -t 0 -q --no-dns-cache $HOST$FULL
         #got it now revert to checking host file 1st
         sed -i "s/hosts:\t\t/hosts:\t\tfiles /g" /etc/nsswitch.conf
         #cat the file because I didn't think to wget through tee
         cat "$F" 
         break 
      ;; 
   esac 
done 
'

Tüm dosyaları tek bir dizine koyduğunu unutmayın, bu nedenle sürüm çakışmalarına neden olabilir. (Bunu bilerek yaptım, böylece 500 kopya jquery'ye sahip olmazdım)


Kodunuzu daha iyi anlayabilmem için yorum yapabilir misiniz? Bu cevabı çok beğendim çünkü çok fazla yazılım yüklememe gerek yok
Daniel F

1
@DanielF Bazı satır içi yorumlar ekledim. Bana mantıklı geliyorsa, muhtemelen yazdığım en hack hacklerden biri. Sadece zorunlu olarak yazdım çünkü yoğun bir kaynak bekleyen tarayıcı tezgahları almaya devam ettim. Yazarken köpek yavrusu Linux kullandığımı belirtmeliyim, bu yüzden bazı satırların sudo çalıştırılması gerekebilir.
technosaurus

Not: bazı tarayıcılar dosyayı "oluşturmak" yerine gerçek bir http başlığına ihtiyaç duyabilir (ancak hiçbiri kullanmamış olsa da). Bu kötü davranışı kabul etmeyen / düzeltmeyen bir tarayıcınız varsa, dosya boyutunu almak için stat ve uygun bir başlık yazdırmak için stat kullanabilirsiniz.
technosaurus

@technosaurus: Benzer bir şey uygulamaya çalışıyorum, ancak bir hata alıyorum: illegal option -- ebu konuda yardımcı olabilir misiniz?
Anurag Peshne

@AnuragPeshne, netcat'in çeşitli uygulamaları vardır; hangi uygulamayı kullandığınıza bağlı olarak, -cbir komut dosyasını çalıştırmak için parametreyi kullanabilirsiniz ( bölüm -eolmadan aynıdır sh -c)
technosaurus

24

Yerel bir web sunucusu çalıştırdığınız anlaşılıyor. Mükemmel.

Mac'inizin dosya sisteminde, adlı bir dosya var /etc/hosts. fooCDN.comBu satırı şu adrese ekleyerek tüm istekleri yerel makinenize yönlendirebilirsiniz /etc/hosts:

127.0.0.1   foocdn.com www.foocdn.com

Düzenlemek için kök (süper kullanıcı) izinlerine ihtiyacınız olacaktır /etc/hosts.

Yukarıdaki satır fooCDN.com, bir web sunucusunun dinlediği kendi bilgisayarınızdan yükleneceği anlamına gelir .

Bununla birlikte, yerel olarak hangi web sunucusunu çalıştırdığınızı belirtmediniz. Web sunucusunun belgelerine ardından, belge kökünü işaret eden bir sanal konak oluşturmalısınız fooCDN.comiçin /Users/name/Desktop/.

Bu, Apache ile kullanmayı deneyebileceğiniz örnek bir yapılandırmadır (kendim test etmedim) :

<VirtualHost 127.0.0.1:80>
    ServerName foocdn.com
    ServerAlias www.foocdn.com
    DocumentRoot /Users/name/Desktop
</VirtualHost>

İşte Nginx (ayrıca test edilmemiş) için örnek bir yapılandırma :

server {
    listen 80;
    root /Users/name/Desktop;
    server_name foocdn.com;
}

Web sunucusu hizmetinizi yeniden başlatmayı veya yeni yapılandırma dosyasını yeniden yüklemeyi unutmayın.


Cevabınız iyiydi, ama hiçbir şey yüklememi gerektirmeyen cevabı kabul ettim
Daniel F

@DanielF: Oh, yani yerel bir web sunucusu çalıştırmıyorsunuz?
Deltik

1
@Deltik Doğru. O istediği sormaya muktedir fooCDN.como hiçbir internet bağlantısına sahip olduğunda bir dosya için.
BenjiWiebe

2

Görevi gerçekleştirmek için URL yeniden yazmayı destekleyen proxy sunucu yazılımını kullanabilirsiniz . Birçok proxy sunucu uygulaması URL'nin yeniden yazılmasını destekler. Örneğin, Windows, Mac OS ve Linux için Charles Web Hata Ayıklama Proxy Uygulaması URL yeniden yazmayı destekler . Mac sisteminize yükleyebilir ve ardından sistemdeki tarayıcıları proxy sunucusunu kullanacak şekilde yapılandırabilirsiniz.

Alternatif olarak, Apache ücretsiz ve açık kaynak, sahip mod_proxy'ye ve mod_rewrite modülleri.

Mitmproxy ücretsizdir ve Mac OS X sisteminde de çalışır.

Proxy sunucusu aracılığıyla kullanılabilir hale getirmek için öğeleri tarayıcınızın önbelleğinden çıkarmanız gerekirse, Chrome önbelleğini görüntüleme (sağlanan kolay yol) ile sağlanan teknikleri kullanabilirsiniz . Örneğin, Google Chrome'da chrome:\\cachetarayıcının adres çubuğuna koyup ardından Chrome önbelleğindeki alakalı öğeleri bulabilir ve başka bir yere kopyalayabilirsiniz.


Charles dışında herhangi bir yazılım, özellikle de özgür yazılım biliyor musunuz?
Daniel F

Cevabınız iyi, ancak özgür olmayan yazılım gerektirmeyen diğer yanıtı kabul ettim.
Daniel F

Bu iyi; Deltik'in çözümü sizin durumunuz için iyi bir çözümdür. Charles'a birkaç ücretsiz alternatif ekledim.
moonpoint

1
@DanielF Bir başka hata ayıklama proxy'si, alfa OS X derlemesine sahip olan ve dosya yanıtlarını ve belirli yanıtları tekrarlayan Fiddler'dir . Tüm alanı yeniden yönlendirmekten daha ayrıntılıdır.
Bob

2

İyi eski wwwoffle gibi sesler ihtiyaçlarınızı paketi gerekir. Çevrimdışı kullanım için kaynakları seçebileceğiniz bir proxy sunucusudur.

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.