Android, Developpement
Android envoyer un fichier sur un serveur avec un port TCP
Bon là il faut un serveur TCP en écoute de l’autre côté sur le port 3248…
Read MoreAdministration système, Debian, Linux
PSAD top ports et top sigs attaqués sur deux mois
Voici les ports les plus attaqués et protégés par PSAD sur deux mois, c’est intéressant de voir quels services sont le plus attaqués en général. Il y a beaucoup d’attaques malgré que ce serveur n’héberge pas beaucoup de services… # Top scanned TCP ports: tcp 22 1544 tcp 3128 1266 tcp 23 452 tcp 4321 410 tcp 1433 394 tcp 8080 324 tcp 3306 324 tcp 3389 209 tcp 445 196 tcp 9999 163 tcp 5000 138 tcp 80 129 tcp 139 125 tcp 25 104 tcp 21320 93 tcp 21 90 tcp 18186 89 tcp 0 88 tcp 4899 68 tcp 5900 59 tcp 135 43 tcp 110 39 tcp 1080 34 tcp 8081 32 tcp 9090 25 tcp 8088 25 tcp 1521 24 tcp 1723 22 tcp 808 22 tcp 8180 20 tcp 8181 20 tcp 7778 17 tcp 5901 16 tcp 8022 16 tcp 2222 16 tcp 8443 16 tcp 8888 16 tcp 11211 12 tcp 79 11 tcp 49152 11 tcp 84 10 tcp 9200 9 tcp 8089 9 tcp 2244 9 tcp 102 9 tcp 502 9 tcp 6305 9 tcp 1998 9 tcp 8834 9 tcp 465 8 tcp 771 8 tcp 8000 7…
Read MorePowershell, Windows
Powershell encryption decryption
Deux méthodes pour encrypter/decrypter une variable: $MyPswd = « password1234 » ConvertTo-SecureString $MyPswd -AsPlainText -Force | ConvertFrom-SecureString | Out-File -FilePath « $chemin\pass.txt » $password = Get-Content « $chemin\pass.txt » | ConvertTo-SecureString $bPswd = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password) $pswd = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bPswd) Write-Host $pswd rm « $chemin\pass.txt » Add-Type -assembly System.Security $passwordBytes = [System.Text.Encoding]::Unicode.GetBytes(« Open Sesame ») $entropy = [byte[]](1,2,3,4,5) $encrytpedData = [System.Security.Cryptography.ProtectedData]::Protect($passwordBytes, $entropy, ‘CurrentUser’) $encrytpedData | Set-Content -enc byte .\password.bin $encrytpedData = Get-Content -enc byte .\password.bin $unencrytpedData = [System.Security.Cryptography.ProtectedData]::Unprotect( $encrytpedData, $entropy, ‘CurrentUser’) $password = [System.Text.Encoding]::Unicode.GetString($unencrytpedData) $password function Set-Key { param([string]$string) $length = $string.length $pad = 32-$length if (($length -lt 16) -or ($length -gt 32)) {Throw « String must be between 16 and 32 characters »} $encoding = New-Object System.Text.ASCIIEncoding $bytes = $encoding.GetBytes($string + « 0 » * $pad) return $bytes } function Set-EncryptedData { param($key,[string]$plainText) $securestring = new-object System.Security.SecureString $chars = $plainText.toCharArray() foreach ($char in $chars) {$secureString.AppendChar($char)} $encryptedData = ConvertFrom-SecureString -SecureString $secureString -Key $key return $encryptedData } function Get-EncryptedData { param($key,$data) $data | ConvertTo-SecureString -key $key | ForEach-Object {[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($_))} } #Encrypt $plainText = « Some Super Secret Password » $key = Set-Key « AGoodKeyThatNoOneElseWillKnow » $encryptedTextThatIcouldSaveToFile = Set-EncryptedData -key $key -plainText $plaintext $encryptedTextThatIcouldSaveToFile #Decrypt $DecryptedText = Get-EncryptedData -data $encryptedTextThatIcouldSaveToFile -key $key $DecryptedText Voilà vous pouvez encrypter vos données sensibles…
Read MoreAdministration Réseau, Sécurité
Linux Iptable Firewall
A adapter biensûr… X.X.X.X = IP du serveur local, Y.Y.Y.Y = IP du serveur distant (Rsync). Pour qu’il soit lancé au démarrage le sauvegarder dans le fichier /etc/init.d/firewall.sh puis on fait un: chmod +x /etc/init.d/firewall.sh update-rc.d firewall.sh defaults #Pour l’enlever si besoin #update-rc.d firewall.sh remove ### BEGIN INIT INFO # Provides: firewall # Setting firewall rules… # # config de base dedibox echo « » echo ‘################# INIT #################’ ###### Debut Initialisation ###### # Vider les tables actuelles iptables -t filter -F iptables -t filter -X echo – Vidage de toutes les regles: [OK] ###### Interdiction de tout entrant ###### # Interdire toute connexion entrante iptables -t filter -P INPUT DROP iptables -t filter -P OUTPUT DROP iptables -t filter -P FORWARD DROP echo – Interdire toute connexion entrante : [OK] # Ne pas casser les connexions établies iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT echo – Ne pas casser les connexions etablies : [OK] ###### Fin Inialisation ###### echo ‘################# INIT #################’ echo « » echo ‘################# RULES ################’ # Autoriser les pings iptables -t filter -A INPUT -p icmp -j ACCEPT iptables -t filter -A OUTPUT -p icmp -j…
Read MoreAdministration système, Asterisk, Linux
Asterisk Installation à partir sources + meetme sur Debian 7
Installation d’une Debian 7 classique On fait un update du système et un upgrade avant toute opération : apt-get update apt-get upgrade On installe les outils nécessaires à la compilation d’Asterisk : apt-get install gcc make pkg-config build-essential wget libssl-dev libncurses5-dev libnewt-dev libxml2-dev linux-headers-$(uname -r) uuid-dev libsqlite3-dev libjansson-dev On installe un serveur de temps : apt-get install ntp On installe mpg123 pour jouer les musiques d’attentes en mp3 : apt-get install mpg123 On installe subversion pour la compatibilité avec le script “get_mp3_source.sh” : apt-get install subversion On installe un serveur mail pour l’envoi des messages : apt-get install postfix On crée un dossier pour accueillir les sources : mkdir /usr/src/asterisk cd /usr/src/asterisk On commence par installer DAHDI pour le support des conférences (meetme) : Téléchargement de l’archive : wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz On décompresse : tar –xvzf dahdi-linux-complete-current.tar.gz cd dahdi-linux-complete-2.9.1.1+2.9.1/ Et on compile: make make install make config On fini par démarrer le driver dahdi /etc/init.d/dahdi start Installation Asterisk cd /usr/src/asterisk/ Téléchargement de l’archive: wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-12-current.tar.gz On décompresse : tar –xvzf asterisk-12-current.tar.gz cd asterisk-12.0.0/ Support MP3 on lance le script « get_mp3_source.sh » (le script utilise svn) : ./contrib/scripts/get_mp3_source.sh ./configure Ensuite « make menuselect » va permettre d’ajouter ces composants : make…
Read MoreDeveloppement, PHP
PHP petite méthode de validation d’email avec test reverse DNS
Une petite méthode plus simple pour vérifier si un email est valide et existe bien par rapport à son nom de domaine: function checkEmail($email) { // First, we check that there’s one @ symbol, // and that the lengths are right. if (!ereg(« ^[^@]{1,64}@[^@]{1,255}$ », $email)) { // Email invalid because wrong number of characters // in one section or wrong number of @ symbols. return false; } // Split it into sections to make life easier $email_array = explode(« @ », $email); $local_array = explode(« . », $email_array[0]); for ($i = 0; $i < sizeof($local_array); $i++) { if (!ereg(« ^(([A-Za-z0-9!#$%&’*+/=?^_`{|}~-][A-Za-z0-9!#$%& ↪’*+/=?^_`{|}~\.-]{0,63})|(\ »[^(\\|\ »)]{0,62}\ »))$ », $local_array[$i])) { return false; } if(!checkdnsrr($email_array[1], »MX »)&& !checkdnsrr($email_array[1], »A »)){ return false; } }
Read MoreAdministration système, Asterisk, Linux
Asterisk Securisation Minimale OBLIGATOIRE
Lorsque votre serveur Asterisk se retrouve sur internet il ne faut pas attendre une heure pour voir ce type de logs: [May 13 06:55:20] NOTICE[24030][C-0000002f] chan_sip.c: Call from » (195.154.181.177:5070) to extension ‘0972599900664’ rejected because extension not found in context ‘default’. [May 13 07:01:55] NOTICE[24030][C-00000030] chan_sip.c: Call from » (5.11.40.147:10020) to extension ‘00972595797509’ rejected because extension not found in context ‘default’. [May 13 07:01:56] NOTICE[24030][C-00000031] chan_sip.c: Call from » (5.11.40.147:10025) to extension ‘900972595797509’ rejected because extension not found in context ‘default’. [May 13 07:01:57] NOTICE[24030][C-00000032] chan_sip.c: Call from » (5.11.40.147:10027) to extension ‘000972595797509’ rejected because extension not found in context ‘default’. Ce sont des tentatives d’appel à des numéros sûrement surtaxés. Les attaquants utilisent le contexte “default” donc en première sécurité il convient de ne pas utiliser ce contexte (les appels échouent) Donc on met un petit pare feu pour éviter tout ça (changer xx par votre port SSH et l’IP de votre provider SIP): # Vider les tables actuelles iptables -t filter -F iptables -t filter -X # Interdire toute connexion entrante iptables -t filter -P INPUT DROP iptables -t filter -P OUTPUT DROP iptables -t filter -P FORWARD DROP # Ne pas casser les connexions établies iptables -A…
Read MorePowershell, Windows
Powershell envoyer un email
Envoyer un email avec Powershell: $attachfile = New-Item -type file -force « $chemin\attachment.txt » Write-Output « attachment file example » | Out-File -Append $attachfile $to = « name@domain.com » $from = « name@domain.com » $smtp = « 192.168.1.1 » $subject = « Subject » $body = « Body » Send-MailMessage -to $to -From $from -Attachments « $chemin\attachment.txt » -SmtpServer $smtp -Subject $subject -Body $body rm « $chemin\attachment.txt » Assez simple finalement !
Read MorePowershell, Windows
Powershell comparaison de fichier
Une petie comparaison de fichier pour faire apparaître les différences et similitudes: $file1 = « $chemin\left.txt » $file2 = « $chemin\right.txt » Write-Output « equalite » | Out-File -Append $file1 Write-Output « equal » | Out-File -Append $file1 Write-Output « diff1 » | Out-File -Append $file1 Write-Output « equalite » | Out-File -Append $file2 Write-Output « equal » | Out-File -Append $file2 Write-Output « diff2 » | Out-File -Append $file2 Compare-Object $(Get-Content « left.txt ») $(Get-Content « right.txt ») -IncludeEqual | Where {$_.SideIndicator -eq ‘==’} | ForEach-Object {$_.InputObject} | Out-File « result_equal.txt » Compare-Object $(Get-Content « left.txt ») $(Get-Content « right.txt ») -IncludeEqual | Where {$_.SideIndicator -eq ‘=>’} | ForEach-Object {$_.InputObject} | Out-File « result_right.txt » Compare-Object $(Get-Content « left.txt ») $(Get-Content « right.txt ») -IncludeEqual | Where {$_.SideIndicator -eq ‘<=’} | ForEach-Object {$_.InputObject} | Out-File « result_left.txt » $compequal = gc « result_equal.txt » $compleft = gc « result_left.txt » $compright = gc « result_right.txt » $context = Get-Content $file1 | Select-String equalite -Context 2 Write-host $context Write-Host « Comparaison ==: » $compequal Write-Host « Comparaison:=> » $compleft Write-Host « Comparaison:<= » $compright rm « left.txt » rm « right.txt » rm « result_equal.txt » rm « result_right.txt » rm « result_left.txt » Très pratique !
Read MorePowershell, Windows
Powershell sorting de fichier
Petit aperçu du sorting de fichier: $createsortfile = New-Item -type file -force « $chemin\sort.txt » Write-Output « chiffre;lettre;date » | Out-File -Append $createsortfile Write-Output « 10;a;2012-04-05 » | Out-File -Append $createsortfile Write-Output « 11;z;2012-04-01 » | Out-File -Append $createsortfile Write-Output « 13;b;2012-04-02 » | Out-File -Append $createsortfile Import-csv « $chemin\sort.txt » -delimiter « ; » | sort-object date,lettre | export-csv « $chemin\sort.csv » $resultsort = gc « $chemin\sort.csv » Write-Host $resultsort rm « $chemin\sort.* » ça reste simple comme exemple, on est d’accord…
Read MoreAdministration système, Linux
Bash sécuriser un site web rapidement
Tout simplement; on set les droits et les propriétaires récursivement sur le dossier /var/www chown www-data:www-data /var/www -R cd /var/www/ find . -type f -exec chmod 0644 {} \; && find . -type d -exec chmod 0755 {} \; Voilà avec mod-security en plus, et vos fichiers de configuration en dehors de /var/www comme dans /var/mesfichiersdeconf ça devrait aller…
Read MoreDeveloppement, PHP
PHP OVH API changer les DNS de l’IP principale pour le domaine principal et d’un sous domaine
Ce script va cherche les IDs du domaine principal et d’un sous domaine et à partir de ces IDs modifie l’IP cible… Il vous suffit d’indiquer vos informations d’identifications: $AK = « »; $AS = « »; $CK = « »; Et changer « xxx.xxx.xxx.xxx » par la nouvelle IP cible Et changer « nom-de-domaine.com » par votre nom de domaine biensûr ! <?php # Copyright (c) 2013, OVH SAS. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # #* Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. #* Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. #* Neither the name of OVH SAS nor the # names of its contributors may be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY OVH SAS AND CONTRIBUTORS « AS IS » AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,…
Read MoreDeveloppement, PHP
PHP envoyer un email avec PHPMailer
Voici comment envoyer un email html avec PHPMailer. $mail = new PHPMailer ( true ); // defaults to using php « mail() »; the true param means it will throw exceptions on errors, which we need to catch $mail->AddReplyTo ( ‘noreply@my.server.com’, ‘Admin Server’ ); $mail->AddAddress ( ‘target_email@client.server.com’ ); $mail->SetFrom ( ‘noreply@my.server.com’, ‘Message’ ); $mail->Subject = ‘Subject’; $body = « YOUR HTML MESSAGE »; // HTML tag $mail->MsgHTML ( $body ); // $mail->Body = $message; $mail->Send (); } catch ( phpmailerException $e ) { $log->error ( « CONTACT -Erreur envoi : » ); $log->error ( $e->getMessage () ); } catch ( Exception $e ) { $log->error ( « CONTACT -Erreur envoi : » ); $log->error ( $e->getMessage () ); } Voilà !
Read MoreDeveloppement, PHP
PHP lire un fichier et effacer la première ligne
Petite méthode pour lire un fichier, récupérer la valeur de la première ligne puis effacer cette ligne avant d’enregistrer le fichier à nouveau. function read_and_delete_first_line($filename) { $file = file ( $filename ); $output = $file [0]; unset ( $file [0] ); file_put_contents ( $filename, $file ); return $output; } $myFirstLineData= read_and_delete_first_line ( « /var/myfile » ); Attention cela ne fonctionne que si l’utilisateur qui appelle cette méthode à les droits en écriture sur le fichier cible « myfile ».
Read MoreDeveloppement, JavaFX
JavaFX envoyer des informations en POST avec BASIC authentication
Envoyer un POST sur une page PHP avec une authentification BASIC: import java.util.ArrayList; import java.util.Locale; import javafx.concurrent.Service; import javafx.concurrent.Task; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.AuthCache; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.auth.BasicScheme; import org.apache.http.impl.client.BasicAuthCache; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class SendInformationsToServer extends Service<Void> { String serverAdress = new ObfuscatedString(new long[] {0x48293BBB503D3EDBL, 0xF64DDCEE66BAE29EL, 0x7788E3D61ADECC17L, 0x5764815B0D4457BAL, 0xDDB97EDA9E2632E1L}).toString(); ///http://my.server.com/ String serverRealm = new ObfuscatedString(new long[] {0xA2761EA86C347E34L, 0xB8043A57A9976A22L, 0xE84223FC32AC309EL, 0x5B806D1BB6502EB4L}).toString(); ///my.server.com String pass = new ObfuscatedString(new long[] {0x62D33FE83DC25EFDL, 0xB767F942869048D8L, 0xF2666902653CE769L}).toString(); String login = new ObfuscatedString(new long[] {0x5EAC65F126BCA127L, 0xBC4D210989A36D0L, 0x42ADC688BE800C2CL}).toString(); @Override protected Task<Void> createTask() { return new Task<Void>() { protected Void call() throws Exception { Locale locale = Locale.getDefault(); String lang = locale.getDisplayLanguage(); CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials( new AuthScope(serverRealm, 80), new UsernamePasswordCredentials(login, pass)); CloseableHttpClient httpclient = HttpClients.custom() .setDefaultCredentialsProvider(credsProvider) .build(); HttpHost targetHost = new HttpHost(serverRealm, 80, « http »); // Create AuthCache instance AuthCache authCache = new BasicAuthCache(); // Generate BASIC scheme object and add it to the local auth cache BasicScheme basicAuth = new BasicScheme(); authCache.put(targetHost, basicAuth); // Add AuthCache to the execution context HttpClientContext context = HttpClientContext.create(); context.setCredentialsProvider(credsProvider); context.setAuthCache(authCache); try { HttpPost httppost = new…
Read MoreDeveloppement, JavaFX
JavaFX override tab dans les TextArea pour la navigation clavier
Avec cette méthode l’utilisateur pourra changer de champ avec « tab » même dans la TextArea. Si l’utilisateur fait Alt-Tab il fait bien un tab… myTextArea.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent event) { if (event.getCode() == KeyCode.TAB) { TextAreaSkin skin = (TextAreaSkin) putShareTextArea.getSkin(); if (skin.getBehavior() instanceof TextAreaBehavior) { TextAreaBehavior behavior = (TextAreaBehavior) skin.getBehavior(); if (event.isControlDown()) { behavior.callAction(« InsertTab »); } else if (event.isShiftDown()) { behavior.callAction(« TraversePrevious »); } else{ behavior.callAction(« TraverseNext »); } event.consume(); } } else if (event.getCode() == KeyCode.ENTER) { TextAreaSkin skin = (TextAreaSkin) putShareTextArea.getSkin(); if (skin.getBehavior() instanceof TextAreaBehavior) { TextAreaBehavior behavior = (TextAreaBehavior) skin.getBehavior(); if (event.isControlDown()) { behavior.callAction(« InsertTab »); } else if (event.isShiftDown()) { behavior.callAction(« TraversePrevious »); } else{ behavior.callAction(« TraverseNext »); } event.consume(); } } } }); Pas si compliqué 🙂
Read MoreDeveloppement, JavaFX
JavaFX simple animation
Une petite méthode pour faire tourner une image indéfiniment sur son axe… public ParallelTransition setParallelTransitionForNode(Node node) { FadeTransition fadeTransition = new FadeTransition(Duration.millis(10000), node); fadeTransition.setFromValue(1.0f); fadeTransition.setToValue(0.0f); fadeTransition.setAutoReverse(true); RotateTransition rotateTransition = new RotateTransition(Duration.seconds(10), node); rotateTransition.setAxis(Rotate.Y_AXIS); rotateTransition.setFromAngle(0); rotateTransition.setToAngle(360); rotateTransition.setAutoReverse(true); ParallelTransition parallelTransition = new ParallelTransition(); parallelTransition.getChildren().addAll( fadeTransition, rotateTransition ); parallelTransition.setCycleCount(Timeline.INDEFINITE); parallelTransition.play(); return parallelTransition; } Avec « ParallelTransition » vous pouvez ajouter toute autre animation à celles déjà positionnées ci-dessus. Après la seule limite est presque l’imagination !
Read MoreDeveloppement, JavaFX
Java Http Commons Librairie et authentification basic
Voici une petite méthode qui utilise la libraire « http commons » et qui s’authentifie en type « BASIC » sur un serveur web qui a un « .htaccess » pour limiter l’accès. private boolean getInfos() { boolean hasentries = false; try { HttpHost targetHost = new HttpHost(« server.name », 80, « http »); CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(« login », « password »)); AuthCache authCache = new BasicAuthCache(); authCache.put(targetHost, new BasicScheme()); // Add AuthCache to the execution context final HttpClientContext context = HttpClientContext.create(); context.setCredentialsProvider(credsProvider); context.setAuthCache(authCache); HttpClient client = HttpClientBuilder.create().build(); HttpResponse response = client.execute(new HttpGet(serverAdress + « get.php »), context); HttpEntity responseEntity = response.getEntity(); int statusCode = response.getStatusLine().getStatusCode(); String entityContents = EntityUtils.toString(responseEntity); if (entityContents.contains(« # »)) { hasentries = true; } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return hasentries; } La méthode appelle le fichier get.php et si il y a des entrées retourne « true » A vous de jouer !
Read MoreAndroid, Developpement
Android download de fichier
Télécharger un fichier à partir d’une URL, on vérifie via MD5 que le fichier téléchargé est bien similaire à celui du départ (sinon on utilise celui en local du dossier « raw »: xmlfile.xml): public boolean downloadFile(final String path) { try { URL url = new URL(path); //On récupère le MD5 du fichier à télécharger pour le comaprer au fichier qui va être /// téléchargé juste après String md5online = new String(Hex.encodeHex(DigestUtils.md5(path))); Log.d(« MD5ONLINE », md5online); URLConnection ucon = url.openConnection(); ucon.setReadTimeout(5000); ucon.setConnectTimeout(10000); InputStream is = ucon.getInputStream(); BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5); ///L’emplacement de ce fichier est dans la partie « privée » de l’application Android File file = new File(MainActivity.this.getDir(« filesdir », Context.MODE_PRIVATE) + « /xmlfile.xml »); ///SI le fichier existait on le supprime if (file.exists()) { file.delete(); System.out.println(« file deleted !!!!!!!!!!!!!!!!!! »); } //On crée le fichier file.createNewFile(); ///Et on écrit le résultat du parsing du fichier distant dans un fichier local FileOutputStream outStream = new FileOutputStream(file); byte[] buff = new byte[5 * 1024]; int len; while ((len = inStream.read(buff)) != -1) { outStream.write(buff, 0, len); } outStream.flush(); outStream.close(); inStream.close(); String md5download = new String(Hex.encodeHex(DigestUtils.md5(file.getAbsolutePath()))); Log.d(« MD5DOWN », md5download); ///SI le fichier télécgharger est différents du fichier reçu on utilise le fichier en local /// car il y a eût…
Read MoreAndroid, Developpement
Android empêcher la veille
Tout simplement: getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); Done !
Read More