Thema: Ad-hoc wifi

Einzelnen Beitrag anzeigen
Alt 18.09.2009, 09:01   #12 (permalink)
Android-Hilfe.de Mitglied

Registriert seit: 31.07.2009
Beiträge: 75
Abgegebene Danke: 1
Erhielt 25 Danke für 13 Beiträge
Standard AW: Ad-hoc wifi

Da fehlen dir garantiert die "root" rechte. Tipp mal "id". Fuer alle interessierten: mein Ad-Hoc-Connect-Script funktioniert mittlerweise recht gut, ich paste es mal hier hin:

Code:
#!/system/bin/sh

# Fixed IP config, use ADR=dhcp otherwise
ADR=104.198.65.66
MSK=255.0.0.0
DNS=67.223.248.57

# Wifi config, BSSID seems to be required. Use "r" command to show scan_results
# Do "iwlist wlan0 freq" on PC for channel list, ch1=2412, ch11=2462, ch13=2472
ESSID="olsr.freifunk.net"
BSSID="02:ca:ff:ee:ba:be"
FREQU=2457

# Neighbour for ping test ("P" command)
NEIGH=104.198.65.65

DEV=eth0

# Note: the /system/bin/sh has no test command
# so we use "case;easc" instead of "if;then;fi"

timer () {
  case "$time" in
    0)return 1;;
  esac
  time=$((time-1))
}

pidof () {
  for cmd in /proc/*/cmdline
  do
    case "$(cat $cmd)" in
      $1*)
        pid=${cmd#/proc/}
        echo ${pid%%/*}
	return
      ;;
    esac
  done
}

state () {
  for i in $(wpa_cli -i $DEV -p /data/misc/wifi status)
  do
    case "$i" in
      wpa_state=*)echo ${i#*=};;
    esac
  done
}

# returns network number, creates new entry if ssid unknown

getnetnum () {
  ssid=$1
  net=none
  IFS="
"
  for i in $(wpa_cli -i $DEV -p /data/misc/wifi list_network)
  do
    unset IFS
    set $i
    case "$2" in
      $ssid)net=$1;;
    esac
  done
  case "$net" in
    none)
      net=$(wpa_cli -i $DEV -p /data/misc/wifi add_network)
    ;;
  esac
  echo $net
}

# ssid bssid frequency

adhoc () {
  net=$(getnetnum $1)
  pid=$(getprop dhcp.$DEV.pid)
  cmd=$(cat /proc/$pid/cmdline 2>&-)

  # Note: saved /data/misc/wifi/bcm_supp.conf not sufficient for function
  # We always need to (re-)set the parameters with the following commands.

  wpa_cli -i $DEV -p /data/misc/wifi set_network $net mode 1 >&-
  wpa_cli -i $DEV -p /data/misc/wifi set_network $net ssid \"$1\" >&-
  wpa_cli -i $DEV -p /data/misc/wifi set_network $net bssid $2 >&-
  wpa_cli -i $DEV -p /data/misc/wifi set_network $net frequency $3 >&-
  wpa_cli -i $DEV -p /data/misc/wifi set_network $net key_mgmt NONE >&-
  wpa_cli -i $DEV -p /data/misc/wifi enable_network $net >&-
  wpa_cli -i $DEV -p /data/misc/wifi ap_scan 2 >&-
  wpa_cli -i $DEV -p /data/misc/wifi select_network $net >&-

  time=5
  while timer
  do
    state=$(state)
    case "$state" in
      COMPLETED)time=0;;
      DISCONNECTED|ASSOCIATING)sleep 1;;
      *)
        echo "Error: state is $state" 2>&-
        exit 1
      ;;
    esac
  done

  echo $state
  case "$state" in
    COMPLETED);;
    *)exit 1;;
  esac

  case "$ADR" in
    dhcp|DHCP);;
    *)
      # Using a fixed IP config
      case "$cmd" in
        /system/bin/dhcpcd-*)
          # Active dhcpcd, wpa_supp starts new dhcpcd, wait for that
          time=5
          while timer
          do
            case "$(getprop dhcp.$DEV.pid)" in
              $pid)sleep 1;;
              *)time=0;;
            esac
          done
        ;;
      esac

      case "$(cat /proc/$(getprop dhcp.$DEV.pid)/cmdline 2>&-)" in
        /system/bin/dhcpcd-*)
          echo "Stopping dhcpcd ($(getprop dhcp.$DEV.pid))"
          kill $(getprop dhcp.$DEV.pid)
        ;;
      esac

      # Fake a running dhcpcd
      setprop dhcp.$DEV.pid $(pidof /system/bin/wpa_supplicant)
      setprop init.svc.dhcpcd running

      setprop dhcp.$DEV.ipaddress $ADR
      setprop dhcp.$DEV.mask $MSK
      setprop dhcp.$DEV.dns1 $DNS
      ifconfig $DEV $(getprop dhcp.$DEV.ipaddress) netmask $(getprop dhcp.$DEV.mask)
      setprop dhcp.$DEV.reason BOUND
      setprop dhcp.$DEV.result ok
    ;;
  esac
  echo "Ok."
}

case "$1" in
  l)
    wpa_cli -i $DEV -p /data/misc/wifi list_network
  ;;
  o)
    shift
    /data/local/bin/olsrd $*
  ;;
  O)
    kill $(pidof /data/local/bin/olsrd)
    kill -9 $(pidof /data/local/bin/olsrd)
  ;;
  p)
    ping 151.1.1.1
  ;;
  P)
    ping $NEIGH
  ;;
  s)
    wpa_cli -i $DEV -p /data/misc/wifi status
  ;;
  S)
    wpa_cli -i $DEV -p /data/misc/wifi config_save
  ;;
  [0-9])
    wpa_cli -i $DEV -p /data/misc/wifi select_network $1
  ;;
  w)
    wpa_cli -i $DEV -p /data/misc/wifi
  ;;
  h)
    cat<<EOF
Script to connect to wireless lan in ad-hoc (IBSS) mode.
The following single char commands are available:

l	lists configured network entries
o	starts olsrd (ad-hoc routing daemon)
O	stops olsrd (ad-hoc routing daemon)
p	ping test to internet (ctrl-c to stop)
P	ping test to neighbour (ctrl-c to stop)
s	shows current wpa_supplicant status
S	save config, adds adhoc entry to java wifi settings
[num]	manually activate network by number
w	interactively use wpa_cli command line
h	show this help.
(empty)	start ad-hoc wifi mode

You need to switch Wifi off/on to return to normal operation.

You need superuser rights ("root access") to execute. For this,
you may create a script in /system/bin to callup this script,
e.g. su -c "$0 \$*" (with quotes as shown!)
EOF
  ;;
  *)
    adhoc $ESSID $BSSID $FREQU
  ;;
esac

exit 0
sven-ola ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei sven-ola für diesen Beitrag:
fakeraol (14.09.2010)