ScanNetworkActivity
hacker98
plain_text
a year ago
5.8 kB
4
Indexable
main
package com.example.chatappdemo;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.io.IOException;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.concurrent.CountDownLatch;
public class ScanNetworkActivity extends AppCompatActivity {
private static final String TAG = "NetworkScan";
private static final int TIMEOUT_MS = 100; // Thời gian chờ (timeout) khi ping
private ListView listView;
private ArrayAdapter<String> adapter;
private List<String> ipList = new ArrayList<>();
private final int TOTAL_THREADS = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scan_network);
listView = findViewById(R.id.listView);
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, ipList);
listView.setAdapter(adapter);
ipList.clear();
adapter.notifyDataSetChanged();
CountDownLatch latch = new CountDownLatch(TOTAL_THREADS);
Toast.makeText(ScanNetworkActivity.this, "Bắt đầu quét mạng...", Toast.LENGTH_SHORT).show();
String subnet="192.168.244";
new Thread(() -> startNetworkScan(subnet, 1, 25, latch)).start();
new Thread(() -> startNetworkScan(subnet, 26, 50, latch)).start();
new Thread(() -> startNetworkScan(subnet, 51, 75, latch)).start();
new Thread(() -> startNetworkScan(subnet, 76, 100, latch)).start();
new Thread(() -> startNetworkScan(subnet, 101, 125, latch)).start();
new Thread(() -> startNetworkScan(subnet, 126, 150, latch)).start();
new Thread(() -> startNetworkScan(subnet, 151, 175, latch)).start();
new Thread(() -> startNetworkScan(subnet, 176, 200, latch)).start();
new Thread(() -> startNetworkScan(subnet, 201, 225, latch)).start();
new Thread(() -> startNetworkScan(subnet, 226, 254, latch)).start();
// Tạo một luồng để đợi cho tất cả luồng quét hoàn thành
new Thread(() -> {
try {
latch.await();
runOnUiThread(() -> {
Toast.makeText(ScanNetworkActivity.this, "Quét mạng hoàn tất!", Toast.LENGTH_SHORT).show();
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
// Xử lý khi người dùng chọn IP từ danh sách
listView.setOnItemClickListener((parent, view, position, id) -> {
String selectedIp = ipList.get(position);
Toast.makeText(ScanNetworkActivity.this, "Đã chọn IP: " + selectedIp, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(ScanNetworkActivity.this, ChatActivity.class);
intent.putExtra("conversation_IP",selectedIp);
startActivity(intent);
});
}
private String getDeviceIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && inetAddress.getHostAddress().matches("\\d+\\.\\d+\\.\\d+\\.\\d+")) {
return inetAddress.getHostAddress();
}
}
}
} catch (Exception ex) {
Log.e(TAG, "Không thể lấy địa chỉ IP của thiết bị", ex);
}
return null;
}
// Phương thức quét mạng cho một phạm vi IP nhất định
private void startNetworkScan(String subnet, int start, int end, CountDownLatch latch) {
String deviceIpAddress = getDeviceIpAddress();
// Quét từng IP trong phạm vi start đến end
for (int i = start; i <= end; i++) {
String host = subnet + "." + i;
// Bỏ qua IP của thiết bị hiện tại
if (host.equals(deviceIpAddress)) {
Log.d(TAG, "Bỏ qua địa chỉ IP của thiết bị: " + host);
continue;
}
// Thực hiện quét từng IP và cập nhật giao diện
try {
InetAddress inetAddress = InetAddress.getByName(host);
if (inetAddress.isReachable(TIMEOUT_MS)) {
Log.d(TAG, "Đã tìm thấy thiết bị: " + host);
// Cập nhật danh sách IP trên UI
runOnUiThread(() -> {
ipList.add(host);
adapter.notifyDataSetChanged();
});
} else {
Log.d(TAG, "Không thể ping IP: " + host);
}
// Tạm dừng giữa các lần quét để giảm tải hệ thống
Thread.sleep(100); // Nghỉ 100ms giữa các lần quét để tránh quá tải
} catch (IOException | InterruptedException e) {
Log.e(TAG, "Lỗi khi quét IP: " + host, e);
}
}
latch.countDown();
}
}
Editor is loading...
Leave a Comment