Những gì bạn đang cố gắng làm (a) có thể không thực hiện được, và (b) có thể sẽ không được sử dụng nhiều nếu có thể.
Điểm Bonjour là khám phá các dịch vụ , không phải thiết bị. Tất nhiên mỗi dịch vụ được cung cấp bởi một số thiết bị, do đó gián tiếp bạn có thể khám phá các thiết bị với nó ... nhưng chỉ bằng cách khám phá một dịch vụ mà họ đang quảng cáo.
Theo như tôi biết, (ngoại trừ Apple TV) không quảng cáo bất kỳ dịch vụ nào, ngoại trừ khi bạn đang chạy một ứng dụng sử dụng Bonjour để tìm ứng dụng tương tự trên các máy khác. (Ngoại trừ các thiết bị bẻ khóa, thường quảng cáo SSH, AFP, v.v.)
Có một số cách, gián tiếp, nhận danh sách tất cả các dịch vụ đang được quảng cáo bởi bất kỳ ai trên mạng. Cách đơn giản nhất có thể là sử dụng Bonjour Browser for Windows. (Tôi chưa bao giờ thực sự sử dụng nó, nhưng công cụ Mac ban đầu và cổng Java, cả hai mà tôi có sử dụng, cả hai đều đề xuất cổng Windows này cho người dùng Windows.) Fire it up và bạn sẽ nhận được danh sách các dịch vụ và bạn có thể nhấp vào từng cái để xem chi tiết.
Vì vậy, bạn có thể xác minh rằng iPhone và iPad của bạn không quảng cáo bất kỳ dịch vụ nào, điều này sẽ cho thấy rằng không có cách nào để phát hiện chúng thông qua Bonjour.
Trong khi đó, ngay cả khi bạn đã làm tìm thiết bị, bạn định làm gì? Có lẽ bạn muốn giao tiếp với thiết bị theo một cách nào đó, đúng không? Bất kể dịch vụ nào bạn đang cố gắng liên lạc với… chỉ cần duyệt dịch vụ đó — và sau đó, nếu thích hợp, hãy lọc xuống thiết bị iOS. Điều đó phải dễ dàng hơn việc duyệt qua các thiết bị iOS và sau đó lọc xuống những thiết bị có dịch vụ bạn muốn.
Đối liệu có cách nào để phát hiện các thiết bị iOS ... Vâng, có ít nhất hai khả năng. Tôi không biết liệu một trong hai thiết bị đó có hoạt động hay không, nhưng…
Đầu tiên, ngay cả khi thiết bị iOS không quảng cáo bất kỳ thứ gì cho bạn, tôi cho rằng nó đang duyệt dịch vụ bạn có thể quảng cáo. Làm cách nào khác để thấy rằng có một Apple TV cho AirTunes, iTunes trên mạng LAN để đồng bộ hóa, v.v.?
Vì vậy, hãy sử dụng Bonjour Browser để nhận danh sách tất cả các dịch vụ mà máy tính để bàn chạy trên iTunes, Apple TV, v.v. đang quảng cáo. Sau đó tắt tất cả các dịch vụ trên máy tính để bàn của bạn, sử dụng PyBonjour để quảng cáo bất kỳ dịch vụ nào có vẻ hợp lý (và, nếu cần, hãy sử dụng netcat để đưa những người nghe tầm thường vào các cổng bạn quảng cáo). Sau đó bật iPhone của bạn và xem nó có kết nối với bất kỳ thiết bị nào trong số đó hay không. Bạn có thể muốn để nó chạy trong một thời gian, hoặc tắt WiFi và bật lại.(Tôi đoán rằng, mặc dù khuyến nghị của Apple, nó không duyệt liên tục cho hầu hết các dịch vụ, nhưng chỉ cần kiểm tra mỗi một lần trong một thời gian và/hoặc mỗi khi thay đổi trạng thái mạng của nó. Thật không may, ngay cả khi bạn có thể tìm thấy một dịch vụ mà tất cả các thiết bị iOS sẽ kết nối, bạn có thể không phân biệt được thiết bị iOS với những người khác chỉ bằng cách nhận các kết nối ở đó. Ví dụ, tôi khá chắc chắn rằng bất kỳ Mac hoặc Windows hộp chạy iTunes sẽ nhấn lên dịch vụ AirTunes giả của bạn, và bất kỳ máy Mac sẽ nhấn AirPrint của bạn, và như vậy. Vậy, làm thế nào để bạn phân biệt được điều đó với iPhone? Bạn có thể cần phải thực sự phục vụ đủ các giao thức để có được thông tin trong số họ. Điều này sẽ đặc biệt khó khăn đối với các giao thức không có giấy tờ của Apple.
Nhưng hy vọng bạn sẽ nhận được may mắn, và sẽ có một cái gì đó mà tất cả các thiết bị iOS, và không có gì khác, sẽ muốn nói chuyện với. iTunes Sync có vẻ như khả năng hiển nhiên.
Ngoài ra, có một vài điều mà chúng có để phát hoặc chúng không hoạt động. Bạn không thể truy cập mạng WiFi mà không có chương trình phát sóng. Và hầu hết các mạng Wi-Fi gia đình đều sử dụng DHCP, điều đó có nghĩa là chúng phải phát tán DHCP khám phá (và yêu cầu). Có thể có một số loại chữ ký heuristic bạn có thể phát hiện trong các tin nhắn này. Nếu không có gì khác, việc bật DDNS sẽ khiến thiết bị gửi tên máy chủ của nó và bạn có thể đoán dựa trên điều đó (ví dụ: trừ khi bạn thay đổi giá trị mặc định, hostname.lower().endswith('iphone')
).
Cách dễ nhất có thể là thiết lập máy tính để bàn làm điểm truy cập chính cho mạng gia đình của bạn. Tôi tin rằng nó đơn giản như việc bật Chia sẻ Kết nối Internet ở đâu đó trong bảng điều khiển. (Thiết lập như là một đại lý DHCP relay là ít hơn nhiều so với việc là một bộ định tuyến đầy đủ, nhưng tôi không có ý tưởng làm thế nào bạn thậm chí có thể bắt đầu làm điều đó trên Windows.) Sau đó, bạn có thể nắm bắt các chương trình phát sóng DHCP (hoặc, thất bại, Các chương trình phát sóng 802.11) khi chúng vào. Wireshark sẽ chụp và phân tích các tin nhắn cho bạn một cách dễ dàng, vì vậy bạn có thể xem và xem liệu có vẻ như điều này đáng để theo đuổi xa hơn không. (Xem RFC 2131 để biết chi tiết về định dạng không rõ ràng từ các mô tả một lớp bí mật của Wireshark.)
Bạn có thể thực hiện việc này thậm chí xa hơn và xem kết nối internet mỗi máy chủ kết nối với internet. Bất kỳ thiết bị nào định kỳ kiểm tra App Store, máy chủ nâng cấp iOS, v.v ... À, trừ khi một trong những người dùng jailbreak trong nhà của bạn, đó có thể là một chiếc iPhone, phải không? Nhược điểm là một số kiểm tra này có thể là rất định kỳ và phát hiện iPhone 6 giờ sau khi kết nối với mạng của bạn không phải là rất thú vị.
Trước tiên, bạn đã cài đặt Bonjour cho Windows, phải không? – abarnert
yep. Hãy suy nghĩ tôi đã có nó. Mệt mỏi một vài lệnh khác như thế nào. python browse_and_resolve.py _airplay._tcp và phát hiện ra TV của tôi là –
Trong khi đó, điểm của Bonjour là khám phá _services_, chứ không phải _devices_. Bạn sẽ làm gì với một thiết bị nếu bạn phát hiện ra nó? Câu trả lời cho điều đó sẽ cho bạn biết dịch vụ nào bạn định sử dụng, cho bạn biết dịch vụ nào cần duyệt. Ví dụ, nếu bạn muốn 'ssh' cho bất kỳ iPhone đã bẻ khóa nào trên mạng LAN của bạn, hãy duyệt tìm' _ssh._tcp'. – abarnert