【问题标题】:iwlist output to list or variablesiwlist 输出到列表或变量
【发布时间】:2017-09-18 19:25:42
【问题描述】:

我正在尝试创建一个 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

因为我想列出所使用的身份验证类型,所以我显示加密,IE: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

【问题讨论】:

  • 当然,但不要在 egrep 之后向我们显示输出,向我们显示 egrep 的输入,因为如果您在解决方案的其余部分使用 awk,则不需要 egrep (你将是)。为了帮助您设计解析 iwslist 输出的最佳工具,我们需要查看 iwlist 输出,而不是使用其他工具对其进行后处理后得到的结果。
  • 添加了 iwlist wlan0 扫描的完整输出
  • 你快到了。现在包括给定输入的预期输出,您将拥有我们可以开始使用的东西。

标签: linux awk


【解决方案1】:

iwlist wlan0 scan 切换到iw wlan0 scan,这样可以提供更清晰的输出。 当我偶然发现来自 Djey1301 的 GitHub 评论时,几乎得到了我想要的结果:29 sept 2016

iw wlan0 scan | sed -e 's#(on wlan# (on 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"]);
}

我几乎满意的结果:

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

Scheff的帮助下更新

【讨论】:

  • awk 样式看起来有点奇怪。我访问了您提供的链接。这个 awk 脚本的原始版本看起来更好,但这实际上是个人喜好问题。关于KPN fon 问题:额外的if 或模式匹配可以帮助解决这个问题。 (抱歉,我不知道iw wlan0 scan 的输出。因此,我无法建议添加实际的代码行。)
  • iw wlan0的(部分)输出扫描:freq: 2412 987654333 beacon interval: 100 TUs 987654335 signal: -80.00 dBm 987654337 SSID: KPN Fon Supported rates: 1.0* 2.0* 5.5* 11.0* 9.0 18.0 36.0 54.0 DS Parameter set: channel 1ERP: Barker_Preamble_Mode(还有一些)
  • 能否请您将示例输入编辑到您的答案中(因为缺少的行尾可能有助于改进 awk 扫描规则)。
  • 完成。很高兴你在这里帮助我!
  • 所以,它看起来像if ($1 == "SSID:"),然后将行的其余部分存储为 e["SSID"]。在 awk 中:$1 == "SSID" { buf = $2; for (i = 3; i &lt;= NF; ++i) { buf = buf" "$i } ; e["SSID"] = buf ; next }。此行必须在NF &gt; 0 规则之前插入。 (我希望没有错别字。我没有测试就写了这个。)
【解决方案2】:

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

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

不幸的是,我不完全理解您的输出格式的逻辑,即如何制作这些 , WEP,, WPA, WPA2 PSK 片段。顺便提一句。我相信您的第二个示例列表中的某些设置已更改。因此,我把这部分省略了,剩下的给你看。按照这个概念,自己添加缺少的其余部分应该很容易。

文件list-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 中做到了这一点:

$ awk -c -f list-wlan.awk wlan.txt 
Cell 01 (88:03:55:E8:3A:D1, KPN Fon, 29/70, -81)
Cell 02 (90:5C:44:C5:B8:9D, Doggie, 58/70, -52)
Cell 03 (54:FA:3E:60:F9:B1, HZN249093067, 21/70, -89)
Cell 04 (64:D1:A3:31:D1:6C, Sitecom31D16A, 28/70, -82)
Cell 05 (88:03:55:E8:3A:D0, VGV7519E83ADB, 30/70, -80)

$

注意:

iwlist 似乎提供了引用的网络名称(抱歉,ESSID)。所以,这让我对逃避产生了怀疑:有逃避的可能吗?逃什么? (当网络使用非字母数字字符(尤其是引号)命名时,这看起来会很有趣。)这必须解决。结果要么必须应用复杂的取消转义,要么应按原样简单地使用所有内容(包括引号)... 目前,网络名称的引号被简单地删除了。

【讨论】:

  • 不幸的是 -c 不支持运行 awk -f list-wean.awk plan.txt 导致以下错误: awk: bad regex '[0-9': Unmatched [ or [^ the awk version 甚至不支持 --version 或 -W version
  • 正如我在文中所写,我有gawk 并使用-c 让它表现得像awk。关于注册。表达式,我不确定。我希望,预期的注册。 -c 参数也将涵盖表达式...
  • 用 google 很难找到(非 gnu)awk 的手册。我相信我在公司办公室里有一本古老的教科书。可能吧,明天再更新。可能是,你试图摆弄 reg。在此期间自己表达。
  • 我对你的 awk 仍然有点不确定:如果你有一个 Linux(正如你标记你的问题),它应该随 GNU awk 一起提供。但是,我找到了AWK on OpenBSD。它不提供-c 选项。听起来(可能是)你正在使用这个。 (您有 OS/X 吗?)我在本手册中查找了 RE。乍一看,一切看起来都很好,但我没有深入挖掘。顺便提一句。 “古代教科书”是一条死胡同。它只提到了不太详细的 REs - 没有帮助。
  • 我在旧设备上使用 OpenWRT。 iwlist 让我无处可去,切换到iw wlan0 scan 以减少乱码。
猜你喜欢
  • 1970-01-01
  • 2014-04-21
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 2015-08-15
相关资源
最近更新 更多