2014-11-26 15 views
6

Tôi đang cố gắng tìm cách để giao tiếp giữa hai trình duyệt trên cùng một mạng để thiết lập WebRTC mà không có máy chủ khứ hồi (không có STUN/ICE/TURN). Về cơ bản một thay thế cho cách tiếp cận tìm thấy here, trong đó "bắt tay" được thực hiện thông qua sao chép/mail/dán.Trình duyệt có thể liên lạc trực tiếp với trình duyệt khác trên cùng một mạng không?

Sau khi chọn lọc thông qua tất cả các ví dụ cross-browser-truyền thông tôi có thể tìm (như via cookies hoặc WebTCP) cộng với một loạt các câu hỏi về SO (như here), tôi lại tự hỏi một điều đơn giản:

Câu hỏi:
Nếu Alice và Bob truy cập cùng một trang foo.html trong khi trên cùng một mạng và họ biết địa chỉ IP được chỉ định của nhau, có cách nào họ có thể giao tiếp hoàn toàn với những gì có trên trình duyệt không?

Điều này loại trừ các API không chuẩn như Mozilla TCP_Socket_API, nhưng khác với tất cả "thủ thuật" được phép (thẻ img, iframe, cookie, v.v ...).

Tôi chỉ tò mò nếu tôi có thể nghe ai đó trên cùng một mạng "phát sóng" nội dung nào đó thông qua trình duyệt.

Sửa:
foo.html sẽ trên máy chủ tĩnh, không có logic, không ICE, không có phím tắt.

Chỉnh sửa:
Vẫn không phải là giải pháp nhưng máy chủ websocket khi tiện ích của Chrome đến gần hơn. Ví dụ ở đây: almost pure browser serverless WebRTC

+1

Từ đâu là 'foo.html' được phân phối? – Bergi

+0

Điểm tốt. Có thể là cùng một mạng. – frequent

+0

Ý tôi là: Nếu 'foo.html' là máy chủ của một máy chủ (có thể truy cập từ cả hai máy khách), thì có thể dễ dàng nhất để thiết lập máy chủ ICE tại vị trí đó. Sẽ thú vị hơn nếu 'foo.html' là ứng dụng được lưu trong bộ nhớ cache hoặc tệp cục bộ hoặc được phân phối bởi một trong hai" khách hàng ". – Bergi

Trả lời

0

Bạn có thể có một cái nhìn tại này

https://github.com/jed/browserver-client

Tôi nghĩ rằng bạn có thể dễ dàng tạo ra một máy chủ http với javascript và gửi tin nhắn từ một trình duyệt khác

Với Nodejs bạn có thể đạt được như vậy.

+0

nhưng để thiết lập kết nối websocket, tôi cần 'eio.Socket mới ({host:" myserver.com "})' tạo một kết nối, "môi giới" những gì tôi nhận và gửi. Không hoạt động - Tôi đang tìm cách trực tiếp giữa Alice và Bob. – frequent

1

Trong khi MDN documentation lists WebSocketServer làm API ứng dụng khách, tôi không nghĩ điều này là chính xác (có thể họ muốn ghi lại ở đó how to write a server).

Hiện tại, tôi không biết cách nào để tạo ổ cắm máy chủ trên trình duyệt web. Tôi biết một vài cuộc tấn công để quét mạng nội bộ nhưng hầu hết trong số họ dựa vào một máy chủ hoạt động bên ngoài mạng, đó là bạn kết nối với một máy chủ và nhận được JavaScript trở lại mà sẽ mở ra một kết nối WebSocket. Qua kết nối đó, tôi có thể kiểm soát toàn bộ máy khách và mở thêm WebSockets với các địa chỉ IP cục bộ để quét mạng nội bộ.

Nếu trang web nội bộ không implement CORS chính xác (see here), tôi có thể truy cập tất cả các trang web nội bộ mà người dùng hiện tại đang đăng nhập. Đó là một vectơ tấn công nguy hiểm cho phép kẻ tấn công bên ngoài truy cập vào tài liệu nội bộ . This page has a demo of the attack.

Ngay cả Flash won't let you create a server socket.

Nếu bạn cho phép một ứng dụng Java và phiên bản Java trên máy khách là rất cũ hoặc người dùng nhấp một cách mù quáng "OK", thì bạn có thể tạo các ổ cắm máy chủ.

liên quan:

+0

nhiều điều hữu ích. cảm ơn cho đến nay. – frequent

1

Điều này có thể được giải thích một cách dễ dàng. Câu trả lời là không thể. Để cho alice và bob giao tiếp mà không cần bên thứ ba, ít nhất một trong số họ cần phải lắng nghe các kết nối đến. Không thể sử dụng một trình duyệt web chuẩn một mình.

+0

Lúc này, tôi đồng ý. Bạn có thể có thể hack một cái gì đó với nhau, nhưng nó sẽ không phải là một trình duyệt tiêu chuẩn nữa. – nbering

3

Có, bạn có thể thiết lập kết nối trực tiếp giữa hai trình duyệt qua mạng cục bộ bằng WebRTC. Nó đòi hỏi việc sử dụng ICE, nhưng điều đó không không có nghĩa là một máy chủ STUN hoặc TURN bên ngoài là cần thiết. Nếu các trình duyệt trên cùng một mạng, ICE sẽ chỉ thành công với các ứng viên địa phương của mỗi trình duyệt.

STUN/TURN chỉ cần thiết để đảm bảo rằng hai thiết bị đầu cuối có thể thiết lập kết nối ngay cả khi chúng ở trong các mạng khác nhau và phía sau NAT. Trên thực tế, nếu bạn sử dụng hầu hết các ứng dụng ví dụ WebRTC (chẳng hạn như apprtc) với hai trình duyệt được kết nối trong mạng cục bộ, ICE có nhiều khả năng chọn và sử dụng cặp địa chỉ cục bộ nhất. Trong trường hợp này, việc phân bổ kênh trên máy chủ TURN sẽ được thực hiện, nhưng nó sẽ không được sử dụng.

Trong ứng dụng WebRTC của bạn, bạn có thể vô hiệu hóa việc sử dụng STUN/TURN bằng cách chuyển các trình tạo băng trống khi bạn tạo PeerConnection.

+0

Cảm ơn, nhưng tôi đặc biệt muốn biết nếu nó có thể không có ICE. Tôi tò mò về những phương tiện khác tồn tại để "lắng nghe" cho một cái gì đó ... bất cứ điều gì. – frequent

Các vấn đề liên quan