Decepcionado com a falta de boas APIs de rede no Android/Java, desenvolvi uma coleção de ferramentas de rede úteis para o desenvolvimento diário do Android.
O javadoc deve fornecer todas as informações necessárias para entender os métodos, mas se não, sinta-se à vontade para adicionar um problema no github e responderei qualquer dúvida! :)
Se você adora o que estou fazendo com o Android Network Tools e meus outros projetos, agora você pode apoiar meu trabalho diretamente! Ao me pagar um café ☕, você não está apenas suprindo minhas necessidades de cafeína – você está me ajudando a dedicar mais tempo ao desenvolvimento e melhoria desses projetos de código aberto. Cada café conta e traz mais inovação ao mundo da segurança cibernética. Obrigado pelo seu apoio – isso significa muito para mim e para a comunidade de código aberto!
O aplicativo de amostra foi publicado no Google Play e F-Droid para permitir que você teste a biblioteca de forma rápida e fácil. Aproveitar! E envie-nos um feedback se seus testes produzirem resultados diferentes.
Esta biblioteca ainda não foi lançada no Maven Central, até então você pode adicionar como módulo de biblioteca ou usar JitPack.io
adicionar URL maven remoto
repositories {
maven {
url " https://jitpack.io "
}
}
em seguida, adicione uma dependência de biblioteca. Lembre-se de verificar o último lançamento aqui
dependencies {
compile ' com.github.stealthcopter:AndroidNetworkTools:0.4.5.3 '
}
Requer permissão de internet (obviamente...)
< uses-permission android : name = " android.permission.INTERNET " />
Um scanner de porta TCP / UDP simples baseado em java, rápido e fácil de usar. Por padrão, ele tentará adivinhar o melhor tempo limite e threads para usar durante a varredura, dependendo se o endereço for localhost, rede local ou remoto. Você mesmo pode substituí-los chamando setNoThreads() e setTimeoutMillis()
// Synchronously
ArrayList < Integer > openPorts = PortScan . onAddress ( "192.168.0.1" ). setMethodUDP (). setPort ( 21 ). doScan ();
// Asynchronously
PortScan . onAddress ( "192.168.0.1" ). setTimeOutMillis ( 1000 ). setPortsAll (). setMethodTCP (). doScan ( new PortScan . PortListener () {
@ Override
public void onResult ( int portNo , boolean open ) {
if ( open ) // Stub: found open port
}
@ Override
public void onFinished ( ArrayList < Integer > openPorts ) {
// Stub: Finished scanning
}
});
Encontra dispositivos que respondem ao ping que estão na mesma sub-rede do dispositivo atual. Você pode definir o tempo limite para o ping com setTimeOutMillis() [padrão 2500] e o número de threads com setNoThreads() [padrão 255]
// Asynchronously
SubnetDevices.fromLocalAddress().findDevices(new SubnetDevices.OnSubnetDeviceFound() {
@Override
public void onDeviceFound(Device device) {
// Stub: Found subnet device
}
@Override
public void onFinished(ArrayList<Device> devicesFound) {
// Stub: Finished scanning
}
});
Usa o binário de ping nativo se disponível no dispositivo (alguns dispositivos vêm sem ele) e recorre a uma solicitação TCP na porta 7 (solicitação de eco) se não estiver.
// Synchronously
PingResult pingResult = Ping . onAddress ( "192.168.0.1" ). setTimeOutMillis ( 1000 ). doPing ();
// Asynchronously
Ping . onAddress ( "192.168.0.1" ). setTimeOutMillis ( 1000 ). setTimes ( 5 ). doPing ( new Ping . PingListener () {
@ Override
public void onResult ( PingResult pingResult ) {
...
}
});
Nota: Se precisarmos voltar a usar a porta TCP 7 (o modo java) para detectar dispositivos, encontraremos significativamente menos do que com o binário ping nativo. Se isso for um problema, você pode considerar adicionar um binário ping ao seu aplicativo ou dispositivo para que esteja sempre disponível.
Nota: Se você deseja um portscanner mais avançado, considere compilar o nmap em seu projeto e usá-lo.
Envia um pacote Wake-on-Lan para o endereço IP/MAC
String ipAddress = "192.168.0.1" ;
String macAddress = "01:23:45:67:89:ab" ;
WakeOnLan . sendWakeOnLan ( ipAddress , macAddress );
Outros métodos úteis:
// Get a MAC Address from an IP address in the ARP Cache
String ipAddress = "192.168.0.1" ;
String macAddress = ARPInfo . getMacFromArpCache ( ipAddress );
É um projeto Gradle padrão.
Aceito solicitações de pull, problemas e comentários.
git checkout -b my-new-feature
)git commit -am 'Added some feature'
)git push origin my-new-feature
)