เว็บไซต์ปลอมออนไลน์เมื่อออฟไลน์


15

ฉันกำลังพัฒนาเว็บไซต์โดยใช้เซิร์ฟเวอร์ในพื้นที่ แต่ฉันมีการอ้างอิงระยะไกล ฉันต้องการปลอมร้องขอไฟล์จากเซิร์ฟเวอร์ระยะไกล ตัวอย่างเช่นเมื่อเบราว์เซอร์ทำการร้องขอfooCDN.com/bloatedLib.jsเนื้อหาของ/Users/name/Desktop/bloatedLib.jsจะถูกส่งกลับ

ฉันใช้ mac และโซลูชันที่ทำงานในระบบหรือระดับเบราว์เซอร์จะใช้ได้ หากใช้งานได้ในระดับเบราว์เซอร์จะมีเพียงโซลูชัน Firefox หรือ Chrome เท่านั้นที่ใช้ได้ ฉันไม่สามารถใช้คอมพิวเตอร์ที่ใช้ windows ได้


คุณสามารถใช้คอมพิวเตอร์ Windows ได้หรือไม่
geek1011

@ geek1011 ไม่ว่าจะเป็นไปไม่ได้
Daniel F

5
ไม่แน่ใจว่าฉันเข้าใจคุณถูกต้องหรือไม่ แต่คุณพยายามที่จะเข้าถึงเว็บไซต์แม้ว่าคุณจะไม่ได้เชื่อมต่ออินเทอร์เน็ตหรือไม่? และถ้าเป็นเช่นนั้นเข้าถึงสำเนาท้องถิ่น? พร็อกซีเซิร์ฟเวอร์เป็นอย่างไร
LPChip

@ LPChip ฉันต้องการการอ้างอิงจากภายนอกเช่น jQuery ที่จะโหลดแม้ในขณะออฟไลน์ นี่คือที่เก็บของคนอื่นดังนั้นฉันจึงไม่สามารถพึ่งพาคนภายนอกได้ หากมันสามารถโหลดรุ่นในแคชเบราว์เซอร์เมื่อมันออฟไลน์จะสมบูรณ์แบบ เว็บไซต์ส่วนใหญ่อยู่ในเซิร์ฟเวอร์ภายใน
Daniel F

คุณสามารถใช้ HTML5 "เว็บแอปแบบออฟไลน์"
ไมเคิล

คำตอบ:


11

ฉันแฮ็กพร็อกซีเซิร์ฟเวอร์เล็ก ๆ นี้เพื่อดาวน์โหลดไฟล์ที่หายไปเท่านั้น เพียงตั้งค่าไฟล์ / etc / hosts ของคุณให้ชี้ไปที่ไซต์ที่คุณต้องการแคชที่ 127.0.0.1 และไซต์ที่คุณต้องการบล็อกที่ 0.0.0.0

#!/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 
'

โปรดทราบว่ามันทำให้ไฟล์ทั้งหมดในไดเรกทอรีเดียวดังนั้นมันอาจทำให้เกิดความขัดแย้งรุ่น (ฉันทำสิ่งนี้โดยเจตนาดังนั้นฉันจะไม่มี jQuery 500 ชุด)


คุณสามารถแสดงความคิดเห็นรหัสของคุณเพื่อให้ฉันสามารถเข้าใจได้ดีขึ้น ฉันชอบคำตอบนี้มากเพราะฉันไม่จำเป็นต้องติดตั้งซอฟต์แวร์จำนวนมาก
Daniel F

1
@DanielF ฉันได้เพิ่มความคิดเห็นแบบอินไลน์ ให้ฉันรู้ว่ามันสมเหตุสมผลหรือไม่มันอาจเป็นหนึ่งในแฮ็คที่แฮ็คที่สุดที่ฉันเคยเขียน ฉันเขียนมันออกจากความจำเป็นเพียงเพราะฉันยังคงได้รับแผงขายเบราว์เซอร์ที่รอทรัพยากรที่ว่างหนึ่ง ฉันควรจะพูดถึงว่าฉันใช้ลูกสุนัข Linux เมื่อฉันเขียนมันดังนั้นบางบรรทัดอาจต้องเรียกใช้ sudo
technosaurus

หมายเหตุ: เบราว์เซอร์บางตัวอาจต้องมีส่วนหัว http จริงแทนที่จะเป็นเพียง "เร่ง" ไฟล์ (แม้ว่าจะไม่มีการขุดของฉันก็ตาม) หากคุณมีเบราว์เซอร์ที่ไม่ยอมรับ / แก้ไขพฤติกรรมที่ไม่ดีนี้คุณสามารถใช้สถิติเพื่อรับขนาดไฟล์และใช้เพื่อพิมพ์ส่วนหัวที่เหมาะสม
technosaurus

@technosaurus: ฉันพยายามที่จะใช้สิ่งที่คล้ายกัน แต่ฉันได้รับข้อผิดพลาด: illegal option -- eคุณสามารถช่วยได้ไหม
Anurag Peshne

@AnuragPeshne มีการใช้งานที่หลากหลายของ netcat; ขึ้นอยู่กับการใช้งานที่คุณใช้คุณอาจจะสามารถใช้-cพารามิเตอร์สำหรับการเรียกใช้สคริปต์ (เหมือน -eไม่มีsh -cส่วน)
technosaurus

24

ดูเหมือนว่าคุณกำลังเรียกใช้เว็บเซิร์ฟเวอร์ในท้องถิ่น ยอดเยี่ยม

ในระบบแฟ้มของ Mac /etc/hostsของคุณมีไฟล์ที่เรียกว่า คุณสามารถเปลี่ยนเส้นทางคำขอทั้งหมดfooCDN.comไปยังเครื่องท้องถิ่นของคุณโดยเพิ่มบรรทัดนี้ใน/etc/hosts:

127.0.0.1   foocdn.com www.foocdn.com

คุณจะต้องราก (ผู้ใช้ super) /etc/hostsสิทธิ์ในการแก้ไข

บรรทัดข้างต้นหมายความว่าfooCDN.comโหลดจากคอมพิวเตอร์ของคุณเองซึ่งเว็บเซิร์ฟเวอร์กำลังรับฟัง

คุณไม่ได้ระบุว่าเว็บเซิร์ฟเวอร์ใดที่คุณใช้อยู่ภายในเครื่อง ต่อไปนี้เอกสารบนเว็บเซิร์ฟเวอร์ของคุณควรสร้างโฮสต์เสมือนที่ชี้รากเอกสารไปfooCDN.com/Users/name/Desktop/

นี่คือการกำหนดค่าตัวอย่าง (ฉันยังไม่ได้ทดสอบด้วยตัวเอง) คุณสามารถลองใช้กับApache :

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

นี่คือตัวอย่างการกำหนดค่าสำหรับNginx (ยังไม่ได้ทดสอบ):

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

อย่าลืมรีสตาร์ทบริการเว็บเซิร์ฟเวอร์ของคุณหรือโหลดไฟล์การกำหนดค่าใหม่


คำตอบของคุณเป็นสิ่งที่ดี แต่ฉันยอมรับคำตอบที่ไม่ต้องติดตั้งอะไร
Daniel F

@DanielF: โอ้ดังนั้นคุณไม่ได้เรียกใช้เว็บเซิร์ฟเวอร์ในเครื่องใช่ไหม
Deltik

1
@ แก้ไข Deltik เขาต้องการที่จะสามารถขอfooCDN.comไฟล์เมื่อเขาไม่มีการเชื่อมต่ออินเทอร์เน็ต
BenjiWiebe

2

คุณสามารถใช้ซอฟต์แวร์พร็อกซีเซิร์ฟเวอร์ที่รองรับการเขียน URL ใหม่เพื่อให้งานสำเร็จ แอปพลิเคชั่นเซิร์ฟเวอร์พร็อกซีจำนวนมากรองรับการเขียน URL ใหม่ เช่นแอปพลิเคชัน Proxy Web Debugging Proxyสำหรับ Windows, Mac OS และ Linux รองรับการเขียน URLซ้ำ คุณสามารถติดตั้งลงบนระบบ Mac ของคุณแล้วกำหนดค่าเบราว์เซอร์บนระบบเพื่อใช้พร็อกซีเซิร์ฟเวอร์

หรืออีกทางหนึ่งApacheซึ่งเป็นฟรีและโอเพนซอร์สมีโมดูลmod_proxyและmod_rewrite

Mitmproxyนั้นฟรีและจะทำงานบนระบบ Mac OS X

หากคุณจำเป็นต้องดึงรายการออกจากแคชเบราว์เซอร์ของคุณเพื่อให้พวกเขาสามารถใช้ได้ผ่านพร็อกซีเซิร์ฟเวอร์คุณสามารถใช้เทคนิคที่มีให้ ณกำลังดู Chrome แคช (วิธีที่ง่าย) เช่นใน Google Chrome คุณสามารถใส่chrome:\\cacheในแถบที่อยู่ของเบราว์เซอร์แล้วค้นหารายการที่เกี่ยวข้องในแคช Chrome และคัดลอกไปที่อื่น


คุณรู้จักซอฟต์แวร์อื่น ๆ นอกเหนือจากชาร์ลส์โดยเฉพาะซอฟต์แวร์ฟรีหรือไม่?
Daniel F

คำตอบของคุณดี แต่ฉันยอมรับคำตอบอื่น ๆ ที่ไม่ต้องการซอฟต์แวร์ฟรี
Daniel F

ไม่เป็นไร; ทางออกของ Deltik นั้นดีสำหรับสถานการณ์ของคุณ ฉันเพิ่มทางเลือกสองทางฟรีให้กับ Charles
moonpoint

1
@DanielF พร็อกซี่แก้จุดบกพร่องก็คือไวโอลินซึ่งมีอัลฟา OS X สร้างและสนับสนุนไฟล์การตอบสนองและการเล่นการตอบสนองที่เฉพาะเจาะจง มันละเอียดยิ่งกว่าการเปลี่ยนเส้นทางทั้งโดเมนด้วย
บ๊อบ

2

ฟังดูเหมือนwwwoffle แบบเก่าที่ดีควรตอบสนองความต้องการของคุณ เป็นพร็อกซีเซิร์ฟเวอร์ที่คุณสามารถเลือกทรัพยากรสำหรับการใช้งานออฟไลน์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.