2011-10-24 16 views
11

Tôi có một dịch vụ Android cố gắng liên kết với cổng cổng máy chủ 24. Vì nó là cổng đặc quyền, nó không có ngoại lệ ràng buộc. Tôi tự hỏi mình cần làm gì để làm việc này. Tôi thấy điều này đã được hỏi vài lần trong diễn đàn này, nhưng không có giải pháp.Cách liên kết với một cổng nhỏ hơn 1024 trong Android?

Dịch vụ này chạy trên thiết bị chạy trên Android. Chúng tôi xây dựng nền tảng Android cho thiết bị. Chúng tôi có tất cả sự kiểm soát mà chúng tôi cần.

+1

Dựa trên kiến ​​thức chung về Linux, chỉ các quy trình chạy dưới dạng gốc mới có thể nghe trên cổng 24. Bạn thậm chí có thể chạy các ứng dụng Java dưới dạng root không? –

+0

Đồng ý. Quá trình này phải chạy dưới dạng root hoặc có thể là ID người dùng có đặc quyền quản trị viên (không chắc liệu Android có hỗ trợ khái niệm Linux đó) hay không. Thông thường, nếu bạn điều khiển thiết bị, bạn không viết các daemon trong Java, nhưng trong C/C++, và bắt đầu chúng bằng cách sử dụng hỗ trợ daemon Linux bình thường. – CommonsWare

+1

Cách "su ..." của các đặc quyền nâng cao không phải là một tùy chọn khi tôi ràng buộc với một cổng. Tôi không cố gắng để sinh ra một kịch bản shell. Vì mỗi ứng dụng android về cơ bản là một quá trình được chia tách từ zygote, trừ khi zygote nâng cao đặc quyền dựa trên SOMETHING, bạn không thể liên kết. Tôi tự hỏi liệu zygote có cho phép điều đó hay không. Nếu có, SOMETHING là gì? – videoguy

Trả lời

0

Để liên kết với một cổng ít hơn 1024, bạn cần phải được root và có hai cách để làm điều đó.

  1. Hệ thống ứng dụng: Các ứng dụng sẽ được cài đặt vào/system/apps thư mục từ nơi nó sẽ được chạy với quyền root. Tuy nhiên, có một số vấn đề về chữ ký giúp đỡ là available. Phân phối cũng là một vấn đề với các ứng dụng hệ thống.

  2. su nhị phân: Mã nhị phân su có thể được gọi bằng cách đơn giản exec("su -c [command]"). Nhưng mọi thứ được nói dễ hơn làm. Bạn cần chạy một tiến trình Android không chỉ là một lệnh duy nhất. Do đó, có libsuperuser cung cấp cho bạn các phương pháp và có độ dài đầy đủ doc page.