日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 自动连接无限,hotplug应用实例:自动连接无线网

發布時間:2023/12/10 linux 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 自动连接无限,hotplug应用实例:自动连接无线网 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux內核提供了一種機制,使得有熱插拔事件(比如插入或拔出U盤)發生時可以執行一個程序,在本文中我稱之為hotplug程序。內核在調用

hotplug程序時會傳遞一個命令行參數,這個參數是發生熱插拔事件的子系統名稱,常見的有usb, module, drivers,

net等。此外內核在調用hotplug程序是還會設置一些環境變量,如SUBSYSTEM, ACTION, PRODUCT, TYPE,

INTERFACE, DEVPATH等。

下面是一系列實際的熱插拔事件的例子,每一行表示hotplug程序被調用一次:

1 SUBSYSTEM=net, ACTION=linkup, PRODUCT=, TYPE=, INTERFACE=eth0, DEVPATH=/class/net/eth0

2 SUBSYSTEM=module, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/module/ehci_hcd

3 SUBSYSTEM=platform, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/devices/platform/ehci_hcd

4 SUBSYSTEM=drivers, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/bus/platform/drivers/ehci_hcd

5 SUBSYSTEM=usb_host, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/class/usb_host/usb1

6 SUBSYSTEM=usb, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/devices/platform/ehci_hcd/usb1

7 SUBSYSTEM=module, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/module/ohci_hcd

8 SUBSYSTEM=platform, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/devices/platform/ohci_hcd

9 SUBSYSTEM=drivers, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/bus/platform/drivers/ohci_hcd

10 SUBSYSTEM=usb_host, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/class/usb_host/usb2

11 SUBSYSTEM=usb, ACTION=add, PRODUCT=0/0/206, TYPE=9/0/1, INTERFACE=9/0/0, DEVPATH=/devices/platform/ehci_hcd/usb1/1-0:1.0

12 SUBSYSTEM=usb, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/devices/platform/ohci_hcd/usb2

13 SUBSYSTEM=scsi_host, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/class/scsi_host/host0

14 SUBSYSTEM=usb, ACTION=add, PRODUCT=18a5/216/112, TYPE=0/0/0, INTERFACE=8/6/80, DEVPATH=/devices/platform/ehci_hcd/usb1/1-1/1-1:1.0

15 SUBSYSTEM=usb, ACTION=add, PRODUCT=0/0/206, TYPE=9/0/0, INTERFACE=9/0/0, DEVPATH=/devices/platform/ohci_hcd/usb2/2-0:1.0

16 SUBSYSTEM=usb, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/devices/platform/ehci_hcd/usb1/1-1

17 SUBSYSTEM=scsi_generic, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/class/scsi_generic/sg0

18 SUBSYSTEM=scsi_device, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/class/scsi_device/0:0:0:0

19 SUBSYSTEM=scsi, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/devices/platform/ehci_hcd/usb1/1-1/1-1:1.0/host0/target0:0:0/0:0:0:0

20 SUBSYSTEM=block, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/block/sda

21 SUBSYSTEM=module, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/module/ufsd

22 SUBSYSTEM=block, ACTION=add, PRODUCT=, TYPE=, INTERFACE=, DEVPATH=/block/sda/sda1

系統默認的熱插拔處理程序是/sbin/hotplug。在MP800H上/sbin/hotplug用的是diethotplug-0.4,在華

碩公開的源碼中有它的源代碼。這是一個瘦身版的hotplug程序,它的主要工作是在usb存儲設備插入時進行自動掛載,掛載目錄在/tmp

/usbmounts下面,如/tmp/usbmounts/sda1。

我們可以通過修改/proc/sys/kernel/hotplug來重新指定hotplug程序,通過定制hotplug程序,我們可以按我們希望的方式來處理熱插拔事件,比如插入無線網卡時自動連接無線網。下面我將給出一個實現此功能的程序實例。

程序由兩個shell腳本和一個配置文件組成:hotplug腳本是我們定制的hotplug程序,wifi_monitor腳本是無線網絡監控程

序,它們都放在/usr/local/sbin下。wifi.conf是無線網絡配置文件,放在/usr/local/etc下。

首先用我們的hotplug程序替換系統默認的/sbin/hotplug

$ echo /usr/local/sbin/hotplug > /proc/sys/kernel/hotplug

程序是這樣工作的:熱插拔事件發生時,內核執行我們的hotplug程序,即/usr/local/sbin/hotplug。hotplug程序先調用

/sbin/hotplug,讓它完成它該做的工作。然后判斷該事件是否為usb無線網卡插入事件,如果是則執行wifi_monitor,如果是無線網

絡連接事件則通過DHCP獲取IP地址。wifi_monitor根據wifi.conf配置文件嘗試連接無線網絡。它先掃描可用無線網絡,如果找到指定

的網絡則進行連接,否則等5秒鐘再重新掃描。如果掃描3次都沒有找到,則等待10秒鐘后重新讀入配置文件再次開始掃描循環。wifi_monitor還可

以處理無線網絡斷線的情況,即發現無線網絡斷開時重新開始掃描循環。

/usr/local/sbin/hotplug

#!/bin/sh

# let /sbin/hotplug do the dirty work first

/sbin/hotplug $1

#define log file. set to /dev/null if you want to suppress logging

LOG=/var/log/hotplug.log

# log the event

echo "[`date`] hotplug SUBSYSTEM=$SUBSYSTEM, ACTION=$ACTION, PRODUCT=$PRODUCT, TYPE=$TYPE, INTERFACE=$INTERFACE, DEVPATH=$DEVPATH" >> $LOG

EVENT="$SUBSYSTEM.$INTERFACE.$ACTION";

if [ "$EVENT" = "net.wlan0.add" ] ; then

# start wifi monitor

/usr/local/sbin/wifi_monitor $INTERFACE &

elif [ "$EVENT" = "net.wlan0.linkup" ] ; then

/sbin/udhcpc -i $INTERFACE -t 15 -b -q -s /etc/udhcpc.script >> $LOG 2>&1

fi

/usr/local/sbin/wifi_monitor

#!/bin/sh

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin

WPA_CTRL_INTERFACE=/var/lock/wpa_supplicant

WPA_SUPPLICANT_PID=/var/lock/wpa_supplicant.pid

WPA_SUPPLICANT_CONF=/tmp/wpa_supplicant.conf

WIFI_CONF=/usr/local/etc/wifi.conf

if [ -z "$1" ] ; then

echo "Usage: wifi_monitor "

exit 1

fi

IFACE=$1

PIDFILE=/var/lock/wifi_monitor.$IFACE.pid

SYSFS="/sys/class/net/$IFACE"

if [ -e $PIDFILE ] && grep -q wifi_monitor /proc/`cat $PIDFILE`/cmdline ; then

echo "wifi_monitor: another instance is running, quiting..."

exit

fi

read_conf() {

for v in ESSID SECURITY WEP_AUTH WEP_KEYINDEX WEP_KEY WPA_PASSPHRASE ; do unset CONF_$v ; done

for line in `grep -E '^ *[A-Z_]+ *= *[^ #]+' $WIFI_CONF|sed -e 's/#.*//' -e 's/ *//g'` ; do eval CONF_$line ; done

}

reload() {

echo "wifi_monitor: reloading..."

ifconfig $IFACE down

iwconfig $IFACE essid off

}

quit() { exit; }

cleanup() {

[ -e $WPA_SUPPLICANT_PID ] && pkill -x wpa_supplicant

rm -f $WPA_SUPPLICANT_PID

rm -rf $WPA_CTRL_INTERFACE

rm -f $PIDFILE

}

setup_wifi() {

[ -n "$CONF_ESSID" ] || { echo "Error: ESSID not defined!" ; return; }

# scan for AP

ifconfig $IFACE up

local count=0

until [ $count -ge 3 ] || iwlist $IFACE scanning|grep -q $CONF_ESSID ;

do

echo "AP $CONF_ESSID not found, sleeping...";

sleep 5;

let 'count=count+1';

done

if [ $count -lt 3 ] ; then

[ "x$CONF_SECURITY" != "xWPA" ] && [ -e $WPA_SUPPLICANT_PID ] && kill `cat $WPA_SUPPLICANT_PID`

case "$CONF_SECURITY" in

NONE)

iwconfig $IFACE key off

iwconfig $IFACE essid "$CONF_ESSID"

;;

WEP)

[ -n "$CONF_WEP_KEY" ] || { echo "Error: WEP_KEY not defined!" ; return; }

if [ -n "$CONF_WEP_KEYINDEX" ] ; then

iwconfig $IFACE key $CONF_WEP_AUTH [$CONF_WEP_KEYINDEX] "$CONF_WEP_KEY"

else

iwconfig $IFACE key $CONF_WEP_AUTH "$CONF_WEP_KEY"

fi

iwconfig $IFACE essid "$CONF_ESSID"

;;

WPA)

[ -n "$CONF_WPA_PASSPHRASE" ] || { echo "Error: WPA_PASSPHRASE not defined!" ; return; }

if [ ! -e $WPA_SUPPLICANT_PID ] || ! pgrep -x wpa_supplicant > /dev/null ; then

# generate the wpa_supplicant.conf

if [ "x$LAST_WPA_PASSPHRASE" != "x$CONF_ESSID.$CONF_WPA_PASSPHRASE" ] ; then

WPA_PSK=`wpa_passphrase "$CONF_ESSID" "$CONF_WPA_PASSPHRASE"|grep -o 'psk=[0-9a-z]\{64\}'`

LAST_WPA_PASSPHRASE="$CONF_ESSID.$CONF_WPA_PASSPHRASE"

fi

cat >$WPA_SUPPLICANT_CONF<

ctrl_interface=$WPA_CTRL_INTERFACE

network={

ssid="$CONF_ESSID"

scan_ssid=1

proto=WPA RSN

key_mgmt=WPA-PSK

pairwise=CCMP TKIP

group=CCMP TKIP

$WPA_PSK

}

EOF

wpa_supplicant -B -Dwext -i$IFACE -c$WPA_SUPPLICANT_CONF -P$WPA_SUPPLICANT_PID

fi

;;

esac

fi

}

trap 'reload' HUP

trap 'quit' INT QUIT TERM

trap 'cleanup' EXIT

echo $$ > $PIDFILE

# wait until the kernel structure is ready. FIXME: Is this really necessary?

until [ -d $SYSFS ] ; do sleep 1; done

while [ -d $SYSFS ] ; do

carrier=`cat $SYSFS/carrier 2>/dev/null`

if [ "x$carrier" != "x1" ] ; then

# reload configuration

read_conf

setup_wifi

fi

sleep 10

done

/usr/local/etc/wifi.conf - WEP實例

ESSID=MYESSID

# wireless security: NONE, WEP or WPA

SECURITY=WEP

# WEP security mode: open or restricted

WEP_AUTH=restricted

WEP_KEYINDEX=1

WEP_KEY="06af3154902d96506b3cbe6bae"

/usr/local/etc/wifi.conf - WPA實例

ESSID=MYESSID

# wireless security: NONE, WEP or WPA

SECURITY=WPA

WPA_PASSPHRASE="testtest"

總結

以上是生活随笔為你收集整理的linux 自动连接无限,hotplug应用实例:自动连接无线网的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本三级日本三级日本三级极 | 欧美三p | 亚洲经典一区二区三区四区 | 国产女人18水真多毛片18精品 | 亚洲精品天堂在线 | 亚洲人人精品 | 国产精品视频在线播放 | 99久久久无码国产精品 | 好吊操免费视频 | 日韩免费av一区二区 | 添女人荫蒂视频 | 午夜视频网址 | 久爱视频在线 | 奇米av在线| 毛片基地视频 | 欧美男女视频 | 成年人天堂 | 国产综合网站 | 日本熟妇乱子伦xxxx | 国产三级成人 | 冈本视频在线观看 | 国产91精品一区二区麻豆亚洲 | 在线不卡日本 | 国产精品视频免费播放 | 黄色com| 自拍av在线| 中文字幕1区2区 | 日韩精品在线免费观看 | 欧美成人a∨高清免费观看 国产精品999视频 | 日韩在线观看免费网站 | 色妞干网 | 中文精品久久 | 蜜臀视频在线播放 | 99热最新 | 操屁股视频 | 韩国三级在线视频 | 午夜影院一区二区三区 | 欧美性猛交xxx乱久交 | h无码动漫在线观看 | 亚洲第一二三四区 | 国产精品白浆一区二小说 | 日韩精品二区在线观看 | av在线播放不卡 | www.操com| 日本男人的天堂 | 国产高潮视频在线观看 | 噜噜噜av | 国产男女猛烈无遮挡免费视频 | 国产在线观看无码免费视频 | 国产xxxx在线 | 国产99视频在线 | 熟妇高潮一区二区三区在线播放 | 色黄网站在线观看 | 精品三级在线 | 无码乱人伦一区二区亚洲 | 国产欧美高清 | 亚洲图片综合网 | 日韩欧美h | 超碰日本 | 色呦呦免费 | 色婷婷av一区二区三区软件 | 精品国产久 | 免费看片网站91 | 欧美人与禽zozzo性之恋的特点 | 一级片免费播放 | 国产伦精品一区二区三区免费 | 国产一及毛片 | 国语一区二区 | 美女av网| 91午夜交换视频 | 天堂av中文 | 成人午夜剧场视频网站 | 国产亚洲精品久久久久久久 | h片在线免费观看 | 美女视频一区二区三区 | 饥渴少妇伦色诱公 | 国产精品看片 | 色综合加勒比 | 一区二区三区四区日韩 | 日韩中文字幕影院 | 无码精品国产一区二区三区免费 | 日本熟妇人妻xxxxx | 亚洲国产欧美一区二区三区深喉 | 久久午夜精品人妻一区二区三区 | 黄色aa视频 | 久久久18| 国产精品人八做人人女人a级刘 | 色吧久久 | 久久成年网| 波多野结衣av片 | 新x8x8拨牐拨牐永久免费影库 | 国产精品久久久久久婷婷天堂 | 精品精品视频 | 在线视频1卡二卡三卡 | 亚洲av永久无码精品国产精品 | 天堂伊人 | 色婷婷久久久亚洲一区二区三区 | 亚洲国产成人精品视频 | 免费中文字幕 |