Linux iwlist输出到列表或变量

Linux iwlist输出到列表或变量,linux,awk,Linux,Awk,我正在尝试创建一个php网页,让用户连接到无线网络。由于“无线工具”是唯一可用的选项,我使用iwlist通过以下命令显示可用的wifi网络: iwlist wlan0 scan | egrep 'Cell |Quality|ESSID|Auth|key|IE: IEEE|IE: WPA' 这为我提供了以下输出: Cell 01 - Address: 88:03:55:E8:3A:D0 Quality=23/70 Signal level=-87 d

我正在尝试创建一个php网页,让用户连接到无线网络。由于“无线工具”是唯一可用的选项,我使用iwlist通过以下命令显示可用的wifi网络:

iwlist wlan0 scan | egrep 'Cell |Quality|ESSID|Auth|key|IE: IEEE|IE: WPA' 
这为我提供了以下输出:

     Cell 01 - Address: 88:03:55:E8:3A:D0
                Quality=23/70  Signal level=-87 dBm  
                Encryption key:on
                ESSID:"VGV7519E83ADB"
                IE: WPA Version 1
                    Authentication Suites (1) : PSK
                IE: IEEE 802.11i/WPA2 Version 1
                    Authentication Suites (1) : PSK
      Cell 02 - Address: 88:03:55:E8:3A:D1
                Quality=23/70  Signal level=-87 dBm  
                Encryption key:off
                ESSID:"KPN Fon"
      Cell 03 - Address: 90:5C:44:C5:B8:9D
                Quality=59/70  Signal level=-51 dBm  
                Encryption key:on
                ESSID:"Doggie"
                IE: WPA Version 1
                    Authentication Suites (1) : PSK
                IE: IEEE 802.11i/WPA2 Version 1
                    Authentication Suites (1) : PSK
      Cell 04 - Address: 54:FA:3E:60:F9:B1
                Quality=22/70  Signal level=-88 dBm  
                Encryption key:on
                ESSID:"HZN249093067"
                IE: IEEE 802.11i/WPA2 Version 1
                    Authentication Suites (1) : PSK
      Cell 05 - Address: DC:71:44:FA:1D:17
                Quality=27/70  Signal level=-83 dBm  
                Encryption key:on
                ESSID:"UPC244948707"
                IE: IEEE 802.11i/WPA2 Version 1
                    Authentication Suites (1) : PSK
      Cell 06 - Address: 64:D1:A3:31:D1:6C
                Quality=24/70  Signal level=-86 dBm  
                Encryption key:on
                ESSID:"Sitecom31D16A"
                IE: IEEE 802.11i/WPA2 Version 1
                    Authentication Suites (1) : PSK
      Cell 07 - Address: F8:04:2E:30:84:31
                Quality=22/70  Signal level=-88 dBm  
                Encryption key:on
                ESSID:"UPC242176060"
                IE: IEEE 802.11i/WPA2 Version 1
                    Authentication Suites (1) : PSK
因为我想列出所使用的身份验证类型,所以我展示了加密,即:IEEE和IE:WPA来列出WEP、WPA1和WPA2 PSK

有没有办法将结果保存在这样的变量中

Cell 01 (88:03:55:E8:3A:D0, VGV7519E83ADB, WPA, WPA2 PSK, 23/70, -87)
Cell 02 (88:03:55:E8:3A:D1, KPN Fon, WEP, , 23/70, -87)
Cell 03 (90:5C:44:C5:B8:9D, Doggie, WPA, WPA2 PSK,  59/70, -51)
etc...
我尝试过使用AWK(gawk不可用),但没有成功

结果

iwlist wlan0 scan

      wlan0     Scan completed :
      Cell 01 - Address: 88:03:55:E8:3A:D1
                Channel:1
                Frequency:2.412 GHz (Channel 1)
                Quality=29/70  Signal level=-81 dBm  
                Encryption key:off
                ESSID:"KPN Fon"
                Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 9 Mb/s
                          18 Mb/s; 36 Mb/s; 54 Mb/s
                Bit Rates:6 Mb/s; 12 Mb/s; 24 Mb/s; 48 Mb/s
                Mode:Master
                Extra:tsf=000009e127b7513e
                Extra: Last beacon: 6290ms ago
                IE: Unknown: 00074B504E20466F6E
                IE: Unknown: 010882848B961224486C
                IE: Unknown: 030101
                IE: Unknown: 2A0104
                IE: Unknown: 32040C183060
                IE: Unknown: 2D1A6C0017FFFF0000000000000000000000000000000C0000000000
                IE: Unknown: 3D1601000400000000000000000000000000000000000000
                IE: Unknown: 3E0100
                IE: Unknown: DD180050F2020101000003A4000027A4000042435E0062322F00
                IE: Unknown: 0B0504001C127A
                IE: Unknown: 7F0101
                IE: Unknown: DD8F0050F204104A00011010440001021041000100103B0001031047001000000000000000030000880355E83ADB1021000B436F72706F726174696F6E1023000B564756373531394B5732321024000930322E30302E3133361042000A413334343030333035311054000800060050F204000110110014576972656C65737320526F757465722857464129100800020084
                IE: Unknown: 07064E4C20010D10
      Cell 02 - Address: 90:5C:44:C5:B8:9D
                Channel:11
                Frequency:2.462 GHz (Channel 11)
                Quality=58/70  Signal level=-52 dBm  
                Encryption key:on
                ESSID:"Doggie"
                Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 9 Mb/s
                          18 Mb/s; 36 Mb/s; 54 Mb/s
                Bit Rates:6 Mb/s; 12 Mb/s; 24 Mb/s; 48 Mb/s
                Mode:Master
                Extra:tsf=000001c683317915
                Extra: Last beacon: 90ms ago
                IE: Unknown: 00124368696E6565732052657374617572616E74
                IE: Unknown: 010882848B961224486C
                IE: Unknown: 03010B
                IE: Unknown: 2A0104
                IE: Unknown: 32040C183060
                IE: Unknown: 0706455520010D14
                IE: Unknown: 2D1AAC0117FFFF000000000000000000000000000000000000000000
                IE: Unknown: 3D160B000700000000000000000000000000000000000000
                IE: WPA Version 1
                    Group Cipher : TKIP
                    Pairwise Ciphers (2) : TKIP CCMP
                    Authentication Suites (1) : PSK
                IE: IEEE 802.11i/WPA2 Version 1
                    Group Cipher : TKIP
                    Pairwise Ciphers (2) : TKIP CCMP
                    Authentication Suites (1) : PSK
                IE: Unknown: 7F080100000000000000
                IE: Unknown: 0B05040031127A
                IE: Unknown: DD180050F2020101000003A4000027A4000042435E0062322F00
                IE: Unknown: 7F080100000000000000
                IE: Unknown: 0706455520010D10
                IE: Unknown: DDA70050F204104A0001101044000102103B00010310470010E6825C801DD411B2860188B76881A5BF1021001852616C696E6B20546563686E6F6C6F67792C20436F72702E1023001C52616C696E6B20576972656C6573732041636365737320506F696E74102400065254323836301042000831323334353637381054000800060050F20400011011000952616C696E6B415053100800020000103C0001011049000600372A000120
                IE: Unknown: DD07000C4300000000
      Cell 03 - Address: 54:FA:3E:60:F9:B1
                Channel:11
                Frequency:2.462 GHz (Channel 11)
                Quality=21/70  Signal level=-89 dBm  
                Encryption key:on
                ESSID:"HZN249093067"
                Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 9 Mb/s
                          18 Mb/s; 36 Mb/s; 54 Mb/s
                Bit Rates:6 Mb/s; 12 Mb/s; 24 Mb/s; 48 Mb/s
                Mode:Master
                Extra:tsf=00000144750d9416
                Extra: Last beacon: 170ms ago
                IE: Unknown: 000C485A4E323439303933303637
                IE: Unknown: 010882848B961224486C
                IE: Unknown: 03010B
                IE: Unknown: 2A0104
                IE: Unknown: 32040C183060
                IE: Unknown: 2D1AEC0103FFFF0000000000000000000000000000000C0000000000
                IE: Unknown: 3D160B000100000000000000000000000000000000000000
                IE: IEEE 802.11i/WPA2 Version 1
                    Group Cipher : TKIP
                    Pairwise Ciphers (2) : TKIP CCMP
                    Authentication Suites (1) : PSK
                IE: Unknown: DD180050F2020101800003A4000027A4000042435E0062322F00
                IE: Unknown: 0B05000027127A
                IE: Unknown: 7F0101
                IE: Unknown: DD07000C4307000000
                IE: Unknown: 07064E4C20010D10
                IE: Unknown: DDA70050F204104A0001101044000102103B00010310470010BC329E001DD811B2860154FA3E60F9B71021001A43656C656E6F20436F6D6D756E69636174696F6E2C20496E632E1023001743656C656E6F20576972656C65737320415020322E344710240006434C313830301042000831323334353637381054000800060050F20400011011000C43656C656E6F4150322E3447100800024388103C0001011049000600372A000120
      Cell 04 - Address: 64:D1:A3:31:D1:6C
                Channel:8
                Frequency:2.447 GHz (Channel 8)
                Quality=28/70  Signal level=-82 dBm  
                Encryption key:on
                ESSID:"Sitecom31D16A"
                Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 9 Mb/s
                          18 Mb/s; 36 Mb/s; 54 Mb/s
                Bit Rates:6 Mb/s; 12 Mb/s; 24 Mb/s; 48 Mb/s
                Mode:Master
                Extra:tsf=0000000bc7aa0889
                Extra: Last beacon: 20750ms ago
                IE: Unknown: 000D53697465636F6D333144313641
                IE: Unknown: 010882848B961224486C
                IE: Unknown: 030108
                IE: Unknown: 2A0102
                IE: Unknown: 32040C183060
                IE: Unknown: 2D1AEE1117FFFF0000010000000000000000000000000C0000000000
                IE: Unknown: 3D1608050500000000000000000000000000000000000000
                IE: IEEE 802.11i/WPA2 Version 1
                    Group Cipher : CCMP
                    Pairwise Ciphers (1) : CCMP
                    Authentication Suites (1) : PSK
                IE: Unknown: DD180050F2020101800003A4000027A4000042435E0062322F00
                IE: Unknown: 0B0502000C127A
                IE: Unknown: DD07000C4307000000
                IE: Unknown: DDDE0050F204104A00011010440001021057000101103B0001031047001027A9A0BC149D4DD5AB6864D1A331D16A1021001153697465636F6D204575726F70652042561023001F53697465636F6D20576972656C657373204769676162697420526F757465721024001F53697465636F6D20576972656C657373204769676162697420526F757465721042000F574C523430303434333831363239321054000800060050F20400011011001F53697465636F6D20576972656C657373204769676162697420526F7574657210080002228C103C0001011049000600372A000120
      Cell 05 - Address: 88:03:55:E8:3A:D0
                Channel:1
                Frequency:2.412 GHz (Channel 1)
                Quality=30/70  Signal level=-80 dBm  
                Encryption key:on
                ESSID:"VGV7519E83ADB"
                Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 9 Mb/s
                          18 Mb/s; 36 Mb/s; 54 Mb/s
                Bit Rates:6 Mb/s; 12 Mb/s; 24 Mb/s; 48 Mb/s
                Mode:Master
                Extra:tsf=000009e127b72128
                Extra: Last beacon: 1680ms ago
                IE: Unknown: 000D56475637353139453833414442
                IE: Unknown: 010882848B961224486C
                IE: Unknown: 030101
                IE: Unknown: 2A0104
                IE: Unknown: 32040C183060
                IE: Unknown: 2D1A6C0017FFFF0000000000000000000000000000000C0000000000
                IE: Unknown: 3D1601000400000000000000000000000000000000000000
                IE: Unknown: 3E0100
                IE: WPA Version 1
                    Group Cipher : TKIP
                    Pairwise Ciphers (1) : TKIP
                    Authentication Suites (1) : PSK
                IE: IEEE 802.11i/WPA2 Version 1
                    Group Cipher : TKIP
                    Pairwise Ciphers (1) : CCMP
                    Authentication Suites (1) : PSK
                IE: Unknown: DD180050F2020101000003A4000027A4000042435E0062322F00
                IE: Unknown: 0B0504001C127A
                IE: Unknown: 7F0101
                IE: Unknown: DD8F0050F204104A00011010440001021041000100103B0001031047001000000000000000030000880355E83ADB1021000B436F72706F726174696F6E1023000B564756373531394B5732321024000930322E30302E3133361042000A413334343030333035311054000800060050F204000110110014576972656C65737320526F757465722857464129100800020084
                IE: Unknown: 07064E4C20010D10

根据您的解释,我在
awk
中启动了一个简单的解析器。实际上,我想知道你为什么排除了
gawk
。(您还标记了
linux
。您的linux发行版中是否有K&R awk而不是
gawk
?)

然而,
gawk
将提供更多的便利,但也可以不使用它。因为我的cygwin中实际上有
gawk
,所以我将它与
-c
一起使用,这应该将它限制为“传统awk”

不幸的是,我没有完全理解输出格式的逻辑,即如何制作这些
、WEP、
、WPA、WPA2 PSK
片段。顺便说一句,我相信您的第二个示例列表中的一些设置已经更改。因此,我省略了这一部分,并向您展示其余部分。遵循这个概念,您应该可以轻松地自己添加缺少的rest

文件
列出wlan.awk

BEGIN {
  #debug = 1
  # states
  cell = "" # current cell
  addr = "" # current address
  name = "" # current name
  qual = "" # current quality
  slvl = "" # current signal level
}

END {
  # flush last cell
  flushCell()
}

/^[ ]*Cell [0-9]+/ { # start of new cell
  # flush previous cell
  flushCell()
  # skip prefix spaces
  sub(/[ ]+/, "") # ; print $0
  # extract cell and address from $0
  sep = index($0, " - Address: ")
  cell = substr($0, 1, sep)
  addr = substr($0, sep + 12)
  # debug
  if (debug) print "cell: "cell" addr: "addr
}

/^[ ]*Quality=/ { # quality/signal level
  # skip prefix spaces
  sub(/[ ]+/, "") # ; print $0
  # extract quality
  match($0, /[0-9/]+/) ; qual = substr($0, RSTART, RLENGTH)
  $0 = substr($0, RSTART + RLENGTH)
  # extract signal level
  match($0, /[-0-9]+/) ; slvl = substr($0, RSTART, RLENGTH)
  # debug
  if (debug) print "qual: "qual" slvl: "slvl
}

/^[ ]*ESSID:/ { # name
  # skip prefix spaces
  sub(/[ ]+/, "") # ; print $0
  # extract name
  match($0, /"[^"]*"/) ; name = substr($0, RSTART + 1, RLENGTH - 2)
  # debug
  if (debug) print "name: '"name"'"
}

function flushCell()
{
  if (cell == "") return # nothing to flush
  printf "%s(%s, %s", cell, addr, name
  ## @todo missing authentification params...
  print ", "qual", "slvl")"
}
我已将您的第二个示例输入保存到一个文件
wlan.txt
,用于调试和演示。我在Windows 10(64位)上的bash/cygwin中这样做了:

注:

iwlist
似乎提供了引用的网络名称(对不起,ESSID)。所以,这让我怀疑逃跑:有可能逃跑吗?什么逃跑?(当一个网络用非字母数字字符命名,尤其是引号命名时,这种情况看起来会很有趣。)这必须进行分类。结果要么是一个复杂的不可回避的应用,要么一切(包括引用)都应该简单地按原样使用。。。
目前,网络名称的引号被简单地删除。

iwlan0 scan
切换到
iw wlan0 scan
,这提供了更清晰的输出。 当我偶然发现来自Djey1301的GitHub评论时,我几乎达到了我想要的结果:

iw-wlan0-scan|sed-e's|(在wlan|上)(在wlan|g|上)awk-f-scan.awk

scan.awk:

BEGIN {

    printf("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n","MAC","SSID","freq","signal","sig%","WPA","WPA2","WEP","TKIP","CCMP");

}
$1 == "SSID:" { buf = $2; for (i = 3; i <= NF; ++i) { buf = buf" "$i } ; e["SSID"] = buf ; next }
NF > 0{
if ($1 == "BSS") {
if( $2 ~ /^[a-z0-9:]{17}$/ ) {
if( e["MAC"] ){
printf("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",e["MAC"],e["SSID"],e["freq"],e["sig"],e["sig%"],e["WPA"],e["WPA2"],e["WEP"],e["TKIP"],e["CCMP"]);
}
    e["MAC"] = $2;
    e["WPA"] = "n";
    e["WPA2"] = "n";
    e["WEP"] = "n";
    e["TKIP"] = "n";
    e["CCMP"] = "n";
    }
}
if ($1 == "SSID:") {
e["SSID"] = $2;
}
if ($1 == "freq:") {
     e["freq"] = $NF;
}
if ($1 == "signal:") {
     e["sig"] = $2 " " $3;
     e["sig%"] = (60 - ((-$2) - 40)) * 100 / 60;
}
if ($1 == "WPA:") {
     e["WPA"] = "y";
}
if ($1 == "RSN:") {
     e["WPA2"] = "y";
}
if ($1 == "WEP:") {
     e["WEP"] = "y";
}
if ($4 == "CCMP" || $5 == "CCMP") {
     e["CCMP"] = "y";
}
if ($4 == "TKIP" || $5 == "TKIP") {
     e["TKIP"] = "y";
}
}
END {
      printf("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",e["MAC"],e["SSID"],e["freq"],e["sig"],e["sig%"],e["WPA"],e["WPA2"],e["WEP"],e["TKIP"],e["CCMP"]);
}

当然,在

的帮助下进行了更新,但不要在egrep后向我们显示输出,而是向我们显示egrep的输入,因为如果您在解决方案的其余部分使用awk,则不需要egrep(您将需要)。为了帮助您设计解析iwslist输出的最佳工具,我们需要查看iwslist输出,而不是使用其他工具对其进行后处理后得到的结果。添加了iwslist wlan0 SCAN0的完整输出。现在,在给定该输入的情况下,包括预期的输出,您就可以开始使用了。不幸的是-c不支持移植运行awk-f list-ween.awk plan.txt会导致以下错误:awk:bad regex“[0-9”:不匹配[or][^awk版本甚至不支持--version或-W version我在文本中写道,我有
gawk
并使用
-c
让它像
awk
一样运行。关于reg.表达式,我不确定。我希望,
-c
参数也能涵盖预期的reg.表达式……真的很难找到谷歌的r(非gnu)awk。我相信我在公司办公室里有一本古老的教科书。可能是,我明天可以更新。可能是,在此期间,你试图自己摆弄注册表表达式。我仍然有点不确定你的awk:如果你有Linux(正如你标记的问题)它应该与GNU awk一起提供。但是,我发现。它没有提供
-c
选项。听起来像(可能是)你正在使用这个。(你有OS/X吗?)我在这本手册中查找了REs。乍一看,一切都很好,但我没有深入挖掘。顺便说一句,“古代教科书”是一条死胡同。它只提到了较少的细节-没有帮助。我正在一个旧设备上使用OpenWRT。iwlist毫无用处,切换到
iw wlan0 scan
,以减少乱七八糟的输出。awk样式看起来有点奇怪。我访问了您提供的链接。这个awk脚本的原始版本看起来更好,但实际上没有问题关于
KPN fon
问题:如果
或模式匹配可以帮助解决这个问题。(对不起,我不知道
iw-wlan0扫描的输出。因此,我不能建议添加实际的代码行。)iw-wlan0扫描的(部分)输出:
BSS 89:03:55:e8:3a:2b(在wlan0上)
TSF:12441130882601 usec(143d,23:52:10)
频率:2412
信标间隔:100 TUs
能力:ESS短时点(0x0401)
信号:-80.00 dBm
最后一次看到:0毫秒前
来自探头响应帧的信息元素:
SSID:KPN Fon
支持的速率:1.0*2.0*5.5*11.0*9.0 18.0 36.0 54.0
DS参数集:通道1
ERP:Barker\u前导码模式(以及一些)请您将示例输入编辑到您的答案中(因为缺少的行尾可能有助于改进awk扫描规则)。完成。非常高兴您能在这里帮助我!因此,它看起来像
如果($1==“SSID:”)
则将行的其余部分存储为e[“SSID”]。在awk中:
中,$1==“SSID”{buf=$2;for(i=3;i0
规则。(我希望没有打字错误。我是在没有测试的情况下写的。)
BEGIN {

    printf("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n","MAC","SSID","freq","signal","sig%","WPA","WPA2","WEP","TKIP","CCMP");

}
$1 == "SSID:" { buf = $2; for (i = 3; i <= NF; ++i) { buf = buf" "$i } ; e["SSID"] = buf ; next }
NF > 0{
if ($1 == "BSS") {
if( $2 ~ /^[a-z0-9:]{17}$/ ) {
if( e["MAC"] ){
printf("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",e["MAC"],e["SSID"],e["freq"],e["sig"],e["sig%"],e["WPA"],e["WPA2"],e["WEP"],e["TKIP"],e["CCMP"]);
}
    e["MAC"] = $2;
    e["WPA"] = "n";
    e["WPA2"] = "n";
    e["WEP"] = "n";
    e["TKIP"] = "n";
    e["CCMP"] = "n";
    }
}
if ($1 == "SSID:") {
e["SSID"] = $2;
}
if ($1 == "freq:") {
     e["freq"] = $NF;
}
if ($1 == "signal:") {
     e["sig"] = $2 " " $3;
     e["sig%"] = (60 - ((-$2) - 40)) * 100 / 60;
}
if ($1 == "WPA:") {
     e["WPA"] = "y";
}
if ($1 == "RSN:") {
     e["WPA2"] = "y";
}
if ($1 == "WEP:") {
     e["WEP"] = "y";
}
if ($4 == "CCMP" || $5 == "CCMP") {
     e["CCMP"] = "y";
}
if ($4 == "TKIP" || $5 == "TKIP") {
     e["TKIP"] = "y";
}
}
END {
      printf("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",e["MAC"],e["SSID"],e["freq"],e["sig"],e["sig%"],e["WPA"],e["WPA2"],e["WEP"],e["TKIP"],e["CCMP"]);
}
MAC|SSID|freq|signal|sig%|WPA|WPA2|WEP|TKIP|CCMP
9B:5c:44:c5:b8:92|Chinees|2437|-78.00 dBm|36.6667|y|y|n|y|y
89:03:55:e8:3a:d2|VGV7519E83ADB|2412|-83.00 dBm|28.3333|y|y|n|y|y
89:03:55:e8:3a:2b|KPN|2412|-88.00 dBm|20|n|n|n|n|n
62:d1:a3:31:d1:61|Sitecom31D16A|2452|-89.00 dBm|18.3333|n|y|n|n|y