HomePass

Hardware & Software
Rispondi
Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

HomePass

Messaggio da ale » 17 nov 2013, 11:19

avete un Nintendo 3DS?
con questo programma potete fare un sacco di incontri tramite Streetpass Relay:

UPDATE 18/11/2013, corretto un bug sull'arresto del servizio:

Codice: Seleziona tutto

using System;
using System.IO;

namespace HomePassSharp
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			bool Esci = false;
			string Comando;
			int NumeroMAC;

			//definisce il processo che si occupa di cambiare i MAC address
			System.Diagnostics.Process proc = new System.Diagnostics.Process();
			proc.EnableRaisingEvents=false; 
			proc.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory + "home_zone";//nome dello script che fa il lavoro di cambio MAC
			proc.StartInfo.UseShellExecute=false;
			proc.StartInfo.RedirectStandardOutput = true;//sopprime l'output dello script


			//legge in memoria il file con l'elenco dei SSID e dei MAC
			string[] MAC_Array = File.ReadAllLines(AppDomain.CurrentDomain.BaseDirectory + "zone.txt");

			Console.WriteLine ("\nProgramma per ciclare i MAC Address delle Nintendo Zone!\nScritto da Ale\n");
			Console.WriteLine ("Inserire il numero del MAC address tra 1 e " + (MAC_Array.GetUpperBound(0)+1).ToString());
			while (!Esci) {
				Console.Write ("HomePass $: ");//visualizza il prompt
				Comando = Console.ReadLine ();
				switch (Comando)
					{
				case "exit"://tutti i vari comandi per uscire
				case "quit":
				case "stop":
				case "esci":
					Console.WriteLine ("Chiudo e reimposto la connessione di rete");
					proc.StartInfo.Arguments = "stop wlan0 eth0";
					proc.Start ();
					proc.WaitForExit ();
					Environment.Exit (0);
					break;
				default://processa i comandi di cambio MAC
					if (int.TryParse (Comando, out NumeroMAC)) {//controlla se è un numero
						if (NumeroMAC > 0 && NumeroMAC <= (MAC_Array.GetUpperBound (0) + 1)) {
							Console.WriteLine ("Imposto il MAC Address " + Comando + " alle " + DateTime.Now.ToShortTimeString());
							string[] Coppia = MAC_Array [NumeroMAC - 1].Split(',');
							if (Coppia.GetUpperBound (0) == 1) {//controlla se ci sono sia SSID che MAC
								Console.WriteLine ("SSID: " + Coppia [0] + " MAC: " + Coppia[1]);
								proc.StartInfo.Arguments = "spoof wlan0 eth0 " + Coppia [0] + " " + Coppia[1];
								proc.Start ();
								proc.WaitForExit ();
							} else {// se non c'è uno dei due
								Console.WriteLine ("Riga " + (NumeroMAC).ToString() + " danneggiata");
							}

						} else {
							Console.WriteLine ("MAC Address non esistente");
						}
					} else {//se non è un numero è un comando sconosciuto
						Console.WriteLine ("Comando non riconosciuto");
					}
						break;
					}
			}	
		}
	}
}
questo script deve chiamarsi home_zone, deve essere nella stessa cartella dell'eseguibile compilato dal C# qui sopra e deve essere chmoddado +x:

Codice: Seleziona tutto

#!/bin/bash
# 13/08/2013
#This is dicamarques edition of the script with mac changed to the ones from the list here https://docs.google.com/spreadsheet/lv?key=0AvvH5W4E2lIwdEFCUkxrM085ZGp0UkZlenp6SkJablE and easier wlan config 
#
# wifi_zone_new
#  A script that emulates a Nintendo Zone in a way that you can actually connect to
#  other people all over the world.
#
# Initial version written by Somebunny (9. August 2013).
#

#
# documentation (sort of)
#
# You will need the following packages/programs:
#  - rfkill
#  - dnsmasq (will be killed if already running)
#  - hostapd (will be killed if already running)
# You should not need any additional configuration work.
#
# This script MUST be run as root, or using sudo, reconfiguring network
#  interfaces does not seem to work when run by non-root.
#
# Please adapt the following sections to your own computer:
#  - variables "zone" and "world", found below
#  - you can add hotsopts in "InitZone()", just copy what is there
#
# Usage: call the script with one extra parameter that describes the
#  MAC address to use. I have prepared some options that work from
#  the thread in the gbatemp forums.
#
# Shutdown: call the script with the parameter "stop".
#
#
# A first attempt to organise everything in a somewhat smarter way.
#

# First, some obligatory checks.
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root or with sudo."
   echo "I don't like this either, but some calls here are really picky!"
   exit 1
fi

# some global settings; you should only need to adapt them for your system once
#  * this is the network interface used for your custom AP; must be wireless
zone=$2
#  * this is the network interface used to access the internet; can be almost anything
world=$3

# some local variables; using default values so that something is there
ssid=$4
mac=$5
country=DE
name="HomePass"

#
# local function that sets up the local variables;
#  crude but better than having to change the script every time
# NOTE: this part should be heavily modified so that it doesn't
#  depend on a static config. Maybe something with an external
#  file or something, so you don't have to share your relay point
#  with the entire world if you don't want to.
#
InitZone() {
  # kill all existing support tools
  killall dnsmasq 2> /dev/null
  killall hostapd 2> /dev/null
  # flush routing entries
  iptables --flush
  # deconfigure network interface
  /sbin/ifconfig $zone down
  case $1 in
    "stop")
      # emergency exit - restore old network state
      echo "Stopping Nintendo Zone hotspot"
      /etc/init.d/network-manager restart # yeah... didn't find a better way to fix it...
      exit
    ;;
    "spoof")
     #lavora
    ;;
    "default")
     #lavora
	;;

  esac
}

# networkmanager often leaves a lock on the wireless hardware, remove it
rfkill unblock wifi

# set up parameters
InitZone $1

# give our wifi device a static IP address in the correct range so hostapd can associate with it
/sbin/ifconfig $zone hw ether $mac
/sbin/ifconfig $zone 192.168.23.1 up

# start dnsmasq
dnsmasq -i $zone --dhcp-range=192.168.23.50,192.168.23.150,255.255.255.0,12h

# enable IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

# set basic routes so that our associated devices can reach the web
iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
iptables --table nat --append POSTROUTING --out-interface $world -j MASQUERADE
iptables --append FORWARD --in-interface $zone -j ACCEPT

sysctl -w net.ipv4.ip_forward=1

# start hostapd, spawn a temporary file
TMPDIR=`mktemp -d`
tmpfile=$TMPDIR/nztmp
echo $tmpfile
trap "rm -rf $TMPDIR" EXIT

echo "interface=${zone}" >> $tmpfile
echo "driver=nl80211" >> $tmpfile
echo "channel=1" >> $tmpfile
echo "ssid=${ssid}" >> $tmpfile
echo "auth_algs=1" >> $tmpfile
echo "wpa=0" >> $tmpfile
echo "country_code=${country}" >> $tmpfile
# uncomment the following two lines if you want MAC filtering
echo "macaddr_acl=1" >> $tmpfile
echo "accept_mac_file=/etc/hostapd/mac_accept" >> $tmpfile

echo "Starting Nintendo Zone hotspot, using config ''${name}''"
echo "SSID: ${ssid}"
echo "Country: ${country}"

hostapd $tmpfile -B -d > /dev/null 2> /dev/null

rm -rf $TMPDIR
qui c'è una lista di MAC address da mettere nel file zone.txt sempre nella cartella dell'eseguibile:

Codice: Seleziona tutto

attwifi,4E:53:50:4F:4F:40
attwifi,4E:53:50:4F:4F:41
attwifi,4E:53:50:4F:4F:42
attwifi,4E:53:50:4F:4F:43
attwifi,4E:53:50:4F:4F:44
attwifi,4E:53:50:4F:4F:45
attwifi,4E:53:50:4F:4F:46
attwifi,4E:53:50:4F:4F:47
attwifi,4E:53:50:4F:4F:48
attwifi,4E:53:50:4F:4F:49
attwifi,4E:53:50:4F:4F:4A
attwifi,4E:53:50:4F:4F:4B
attwifi,4E:53:50:4F:4F:4C
attwifi,4E:53:50:4F:4F:4D
attwifi,4E:53:50:4F:4F:4E
attwifi,4E:53:50:4F:4F:4F
NDS-Guest,00:25:9C:52:1C:6A
attwifi,00:0D:67:15:2D:82
attwifi,00:0D:67:15:D7:21
attwifi,00:0D:67:15:D5:44
attwifi,00:0D:67:15:D2:59
attwifi,00:0D:67:15:D6:FD
attwifi,00:0F:F7:00:2D:82
attwifi,50:3D:E5:75:50:62
attwifi,00:1A:A2:A2:17:23
attwifi,00:1F:CA:60:42:80
attwifi,00:0D:67:1A:46:E7
attwifi,00:3A:99:5B:D0:82
attwifi,00:1F:9E:D3:84:60
attwifi,00:0D:BD:AF:DA:4A
attwifi,00:1F:CA:60:3E:20
attwifi,00:90:FB:32:8C:A4
attwifi,00:21:D8:DE:AB:C0
attwifi,00:24:14:10:df:12
attwifi,00:14:6a:c5:69:52
attwifi,58:8D:9:1E:4C:32
attwifi,5c:0a:5b:2f:3e:61
l'ho testato su debian 7 ma dovrebbe andare senza problemi anche su ubuntu.
serve il demone hostapd, dnsmasq e rfkill.
dovete anche creare un file /etc/hostapd/mac_accept con dentro i MAC address dei vostri 3DS. magari l'ho metterò nella directory dello script che è meglio.
collegate il vostro computer tramite la ethernet in internet e scollegate la WiFi.
tada, il nientendo, mentre è acceso in stand by inizierà a trovare gente da tutto il mondo, 6 per volta.
ogni 15 minuti circa inserite il numero del nuovo MAC address ed il gioco è fatto.
per uscire bisogna scrivere esci o exit o quit. aggiungerò anche stop :P
per ora il nome dell'interfaccia di rete e della wireless sono cablati nel programma, glieli farò leggere da un file di configurazione.
ho scritto il programma sopra per facilitare l'uso dello script sotto, trovato su gbatemp.
aveva solo 6 MAC cablati al suo interno e tutte le volte c'era da specificare le interfacce di rete. oltre che ricordarsi di fare lo stop alla fine.
visto che lo installerò sul NetBook di un'amica che non è pratica di shell ho fatto la versione semplice.
potete anche compilare il C# su windows ed eseguirlo su Linux tramite mono. io l'ho compilato su OSX e lo uso su linux.
l'unico neo è che è da eseguire come root, visto che avvia e stoppa demoni :(
E pluribus unum

Rispondi