Trang web giả mạo trực tuyến khi ngoại tuyến


15

Tôi đang phát triển một trang web bằng máy chủ cục bộ, nhưng tôi có sự phụ thuộc từ xa. Tôi muốn giả mạo yêu cầu cho các tập tin từ các máy chủ từ xa. Chẳng hạn, khi trình duyệt đưa ra yêu cầu về fooCDN.com/bloatedLib.jsnội dung /Users/name/Desktop/bloatedLib.jssẽ được trả lại.

Tôi sử dụng máy mac và một giải pháp hoạt động ở cấp độ hệ thống hoặc trình duyệt sẽ ổn. Nếu nó hoạt động ở cấp trình duyệt, chỉ có giải pháp Firefox hoặc Chrome sẽ ổn. Tôi không thể sử dụng máy tính windows.


Bạn có thể sử dụng máy tính Windows không?
geek1011

@ geek1011 Không, điều đó là không thể
Daniel F

5
Không chắc chắn nếu tôi hiểu bạn chính xác, nhưng bạn đang cố gắng để có thể truy cập một trang web ngay cả khi bạn không có kết nối với internet? và nếu vậy, truy cập một bản sao địa phương? Giống như một máy chủ proxy không?
LPChip

@LPChip Tôi cần tải các phụ thuộc bên ngoài như jQuery ngay cả khi tôi ngoại tuyến. Đây là kho lưu trữ của người khác, vì vậy tôi không thể biến phụ thuộc bên ngoài thành cục bộ. Nếu nó chỉ có thể tải phiên bản trong bộ đệm của trình duyệt khi nó ngoại tuyến thì ti sẽ hoàn hảo. Hầu hết các trang web là trong một máy chủ địa phương.
Daniel F

Bạn có thể sử dụng "ứng dụng web ngoại tuyến" HTML5
Michael

Câu trả lời:


11

Tôi đã hack cùng máy chủ proxy nhỏ này để chỉ tải xuống các tệp bị thiếu. Chỉ cần thiết lập tệp / etc / hosts của bạn để trỏ các trang web bạn muốn lưu vào bộ đệm ở 127.0.0.1 và những trang bạn muốn chặn ở 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 
'

Lưu ý rằng nó đặt tất cả các tệp trong một thư mục, vì vậy nó có thể gây ra xung đột phiên bản. (Tôi đã cố tình làm điều này vì vậy tôi sẽ không có 500 bản sao của trò đùa)


Bạn có thể nhận xét mã của bạn để tôi có thể hiểu nó tốt hơn. Tôi thích câu trả lời này rất nhiều vì tôi không cần cài đặt nhiều phần mềm
Daniel F

1
@DanielF Tôi đã thêm một số ý kiến ​​nội tuyến. Hãy cho tôi biết nếu nó có ý nghĩa, nó có thể là một trong những vụ hack khủng khiếp nhất mà tôi đã viết. Tôi chỉ viết nó ra khỏi sự cần thiết bởi vì tôi liên tục nhận được các quầy trình duyệt đang chờ một tài nguyên bận rộn. Tôi nên đề cập đến việc tôi đã sử dụng puppy Linux khi tôi viết nó, vì vậy một số dòng có thể cần phải chạy sudo.
Technosaurus

Lưu ý: một số trình duyệt có thể cần một tiêu đề http thực tế thay vì chỉ "trích dẫn" tệp (mặc dù không có trình duyệt nào của tôi đã làm). Nếu bạn có một trình duyệt không chấp nhận / khắc phục hành vi xấu này, bạn có thể sử dụng stat để lấy kích thước tệp và sử dụng nó để in một tiêu đề thích hợp.
Technosaurus

@technosaurus: Tôi đang cố gắng thực hiện một cái gì đó tương tự, tuy nhiên tôi đang gặp lỗi : illegal option -- e, bạn có thể giúp với điều này không?
Anurag Peshne

@AnuragPeshne có một số cách triển khai netcat khác nhau; tùy thuộc vào việc triển khai bạn đang sử dụng, bạn có thể sử dụng -ctham số để chạy tập lệnh (giống như -ekhông có sh -cphần)
technosaurus

24

Có vẻ như bạn đang chạy một máy chủ web cục bộ. Thông minh.

Trong hệ thống tệp của máy Mac, có một tệp được gọi /etc/hosts. Bạn có thể chuyển hướng tất cả các yêu cầu cho fooCDN.commáy cục bộ của mình bằng cách thêm dòng này vào /etc/hosts:

127.0.0.1   foocdn.com www.foocdn.com

Bạn sẽ cần quyền root (siêu người dùng) để chỉnh sửa /etc/hosts.

Dòng trên có nghĩa là fooCDN.comsẽ tải từ máy tính của bạn, nơi một máy chủ web đang lắng nghe.

Tuy nhiên, bạn không chỉ định máy chủ web nào đang chạy cục bộ. Sau tài liệu web server, bạn nên tạo một máy chủ ảo trỏ gốc tài liệu của fooCDN.comđể /Users/name/Desktop/.

Đây là một cấu hình mẫu (tôi chưa tự mình kiểm tra) bạn có thể thử sử dụng với Apache :

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

Đây là cấu hình mẫu cho Nginx (cũng chưa được kiểm tra):

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

Đừng quên khởi động lại dịch vụ máy chủ web của bạn hoặc tải lại tệp cấu hình mới.


Câu trả lời của bạn rất hay, nhưng tôi đã chấp nhận câu trả lời không yêu cầu cài đặt gì cả của tôi
Daniel F

@DanielF: Ồ, vậy là bạn không chạy máy chủ web cục bộ?
Deltik

1
@Deltik Đúng. Anh ta muốn có thể yêu cầu fooCDN.commột tập tin khi anh ta không có kết nối Internet.
BenjiWiebe

2

Bạn có thể sử dụng phần mềm máy chủ proxy hỗ trợ viết lại URL để hoàn thành nhiệm vụ. Nhiều ứng dụng máy chủ proxy hỗ trợ viết lại URL. Ví dụ: Ứng dụng Proxy gỡ lỗi Charles Web cho Windows, Mac OS và Linux hỗ trợ viết lại URL . Bạn có thể cài đặt nó trên hệ thống Mac của mình và sau đó định cấu hình các trình duyệt trên hệ thống để sử dụng máy chủ proxy.

Ngoài ra, Apache , là nguồn mở và miễn phí, có các mô đun mod_proxymod_rewrite .

Mitmproxy là miễn phí và cũng sẽ chạy trên hệ thống Mac OS X.

Nếu bạn cần rút các mục ra khỏi bộ nhớ cache của trình duyệt để cung cấp chúng qua máy chủ proxy, bạn có thể sử dụng các kỹ thuật được cung cấp tại Xem bộ đệm Chrome (cách dễ dàng) . Ví dụ: trong Google Chrome, bạn có thể đặt chrome:\\cachevào thanh địa chỉ của trình duyệt và sau đó tìm các mục có liên quan trong bộ đệm Chrome và sao chép chúng ở nơi khác.


Bạn có biết phần mềm nào khác ngoài Charles, đặc biệt là phần mềm miễn phí không?
Daniel F

Câu trả lời của bạn là tốt, nhưng tôi chấp nhận câu trả lời khác không yêu cầu phần mềm không miễn phí.
Daniel F

Tốt rồi; Giải pháp của Deltik là một giải pháp tốt cho tình huống của bạn. Tôi đã thêm một vài lựa chọn thay thế miễn phí cho Charles.
moonpoint

1
@DanielF Một proxy gỡ lỗi khác là Fiddler, có bản dựng alpha OS X và hỗ trợ trả lời tệpphát lại các phản hồi cụ thể . Nó tốt hơn so với chuyển hướng toàn bộ tên miền quá.
Bob

2

Âm thanh như wwwoffle cũ tốt sẽ đáp ứng nhu cầu của bạn. Đó là một máy chủ proxy nơi bạn có thể chọn tài nguyên để sử dụng ngoại tuyến.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.