setodaNote

忘れる用のメモ書き

iOS フォレンジック:sysdiagnose ログを解析する

iOS_sysdiagnose_forensic_scripts

以下のサイトで iOS のフォレンジックに関するスクリプト群が公開されていました。

f:id:soji256:20190528071017p:plain
iOS_sysdiagnose_forensic_scripts logo

バグレポート向けに備えてある iOS の正規機能(脱獄不要)から出力可能な sysdiagnose というログに関する記事で、ログから本体の基礎情報、実行中のプロセス一覧、ネットワークの接続記録など様々な情報を取得できるというものです。これについては sysdiagnose ログをフォレンジック観点で調査した詳細なレポートが掲載されていました。
 

ここでは紹介されていたスクリプトを中心に、実際にどのようなデータが sysdiagnose ログから取得できるのか確認してみました。以下、結果については一部(年月日やIDなど)をマスク(yyyy-mm-dd や xxxxx など)しています。  

iOS_sysdiagnose_forensic_scripts 一覧

Name Description Usage Example
sysdiagnose-sys.py OS情報を抽出します。 python3 sysdiagnose-sys.py -i SystemVersion.plist
sysdiagnose-networkprefs.py ホスト名を抽出します。 python3 sysdiagnose-networkprefs.py -i preferences.plist
sysdiagnose-networkinterfaces.py ネットワーク構成情報を抽出します。 python3 sysdiagnose-networkinterfaces.py -i NetworkInterfaces.plist
sysdiagnose-mobilecontainermanager.py アンインストール情報を抽出します python3 sysdiagnose-mobilecontainermanager.py -i containermanagerd.log.0
sysdiagnose-mobilebackup.py バックアップ情報を抽出します。 python3 sysdiagnose-mobilebackup.py -i com.apple.MobileBackup.plist
sysdiagnose-mobileactivation.py モバイル起動およびアップグレード情報。 python3 sysdiagnose-mobileactivation.py -i mobileactivation.log
sysdiagnose-wifi-plist.py Wi-Fiネットワークに関する項目を抽出します。TSVファイルを出力するには -v オプションを使用してください。 python3 sysdiagnose-wifi-plist.py -i com.apple.wifi.plist -t
sysdiagnose-wifi-icloud.py Wi-Fiネットワークに関する項目(iCloud)を抽出します。TSVファイルを出力するには -v オプションを使用してください。 python3 sysdiagnose-wifi-icloud.py -i ICLOUD.apple.wifid.plist -t
sysdiagnose-wifi-net.py TSVファイルにWi-Fiネットワーク名を抽出します。 python3 sysdiagnose-wifi-net.py -i wifi-buf.log
sysdiagnose-wifi-kml.py Wi-Fiジオロケーション値を抽出し、KML形式ファイルを作成します。 python3 sysdiagnose-wifi-kml.py -i wifi-buf.log
sysdiagnose-uuid2path.py GUIDとパス情報を抽出します。 python3 sysdiagnose-uuid2path.py -i UUIDToBinaryLocations
sysdiagnose-net-ext-cache.py アプリケーション名とGUID情報を抽出します。GUID情報を出力するには -v オプションを使用してください。 python3 sysdiagnose-net-ext-cache.py -i com.apple.networkextension.cache.plist -v
sysdiagnose-appconduit.py 接続情報を抽出します。 python3 sysdiagnose-appconduit.py -i AppConduit.log
  • 目次

sysdiagnose ログの取得方法

  • ログ取得方法:
    • iOS11以上であれば「音量ボタン2つと電源ボタンを同時押し」で取得できます。
    • 取得に成功すると端末が震えますが、特にポップアップ表示などはされません。
  • ログの出力先:
    • 設定 > プライバシー > 解析 > 解析データ > sysdiagnose からファイルを取得できます。
    • 圧縮されており、iOS 上ではログ内容は確認できません。ログを表示した画面の右上にあるボタンからパソコンなどに転送します。
    • 今回取得したログの場合、圧縮された状態で 200MB 超、展開すると 400MB 超のファイルサイズでした。
  • ログ出力名:
    • 「sysdiagnose_yyyy.mm.dd_hh-mm-ss+0900_iPhone_OS_iPhone_16F156」といった形で出力されます。
    • 末尾の英数字は ProductBuildVersion のようです。

f:id:soji256:20190528070914p:plain:w350
sysdiagnose share button

重複ファイルについて

  • 今回はファイルの展開時に重複ファイルの処理が聞かれました。以降は自動でリネームを選択した結果に基づいて記載しています。
  • パース対象とされているファイル名は複数存在している場合がありました。以下では処理結果がエラーにならなかったファイルのパスのみを記載しています。

スクリプトの実行結果

sysdiagnose-sys.py:OS情報

  • OS情報を抽出します。
# file path
# \logs\SystemVersion\SystemVersion.plist
python3 sysdiagnose-sys.py -i SystemVersion.plist
  • 結果例
Running sysdiagnose-sys.py v2019-05-10 Version 1.0

ProductName = iPhone OS
ProductVersion = 12.3
ProductBuildVersion = 16F156

sysdiagnose-networkprefs.py:ホスト名

  • ホスト名を抽出します。
# file path
# \logs\Networking\PaxHeader\preferences.plist
python3 sysdiagnose-networkprefs.py -i preferences.plist
  • 結果例
Running sysdiagnose-networkprefs.py v2019-05-10 Version 1.0

Network LocalHostName = YouriPhone-Name
System ComputerName = YouriPhone_Name
System HostName = YouriPhone-Name

sysdiagnose-networkinterfaces.py:ネットワーク構成情報

  • ネットワーク構成情報を抽出します。
    • 結果を Google などで検索すると機種名と紐づいたので、機種の特定にも利用できるかもしれません。
# file path
# \logs\Networking\PaxHeader\NetworkInterfaces.plist
python3 sysdiagnose-networkinterfaces.py -i NetworkInterfaces.plist
  • 結果例
Running sysdiagnose-networkinterfaces.py v2019-05-10 Version 1.0

==================================
BSD Name = en0
Active = True
IOMACAddress = xxxxxxxxxxxxx
IOPathMatch = IOService:/AppleARMPE/arm-io@2240000/AppleS8000IO/uart4@A0D0000/AppleSamsungSerial/wlan/AppleBCMWLANBusInterfacePCIe/AppleBCMWLANCore/en0
UserDefinedName = Wi-Fi
==================================
BSD Name = en1
Active = True
IOMACAddress = xxxxxxxxxxxxx
IOPathMatch = IOService:/AppleARMPE/arm-io@2240000/AppleS8000IO/usb-complex@C900000/AppleS5L8960XUSBArbitrator/usb-device@100000/iPhone@0/AppleUSBEthernet@5/AppleUSBEthernetDevice/en1
UserDefinedName = Ethernet Adaptor (en1)
==================================
BSD Name = en2
Active = True
IOMACAddress = xxxxxxxxxxxxx
IOPathMatch = IOService:/AppleARMPE/arm-io@2240000/AppleS8000IO/usb-complex@C900000/AppleS5L8960XUSBArbitrator/usb-device@100000/iPhone@0/AppleUSBNCMData@c/AppleUSBDeviceNCMData/en2
UserDefinedName = Ethernet Adaptor (en2)
==================================
BSD Name = pdp_ip0
Active = True
IOPathMatch = IOService:/AppleARMPE/arm-io@2240000/AppleS8000IO/usb-complex@C900000/AppleS5L8960XUSBArbitrator/usb-ehci1@03000000/AppleS5L8960XUSBEHCI@03000000/hsic-baseband@03100000/hsic-baseband/pdp_ip0/pdp_ip0
UserDefinedName = Cellular (pdp_ip0)
==================================
BSD Name = pdp_ip1
Active = True
IOPathMatch = IOService:/AppleARMPE/arm-io@2240000/AppleS8000IO/usb-complex@C900000/AppleS5L8960XUSBArbitrator/usb-ehci1@03000000/AppleS5L8960XUSBEHCI@03000000/hsic-baseband@03100000/hsic-baseband/pdp_ip1/pdp_ip1
UserDefinedName = Cellular (pdp_ip1)
==================================
BSD Name = pdp_ip2
Active = True
IOPathMatch = IOService:/AppleARMPE/arm-io@2240000/AppleS8000IO/usb-complex@C900000/AppleS5L8960XUSBArbitrator/usb-ehci1@03000000/AppleS5L8960XUSBEHCI@03000000/hsic-baseband@03100000/hsic-baseband/pdp_ip2/pdp_ip2
UserDefinedName = Cellular (pdp_ip2)
==================================
BSD Name = pdp_ip3
Active = True
IOPathMatch = IOService:/AppleARMPE/arm-io@2240000/AppleS8000IO/usb-complex@C900000/AppleS5L8960XUSBArbitrator/usb-ehci1@03000000/AppleS5L8960XUSBEHCI@03000000/hsic-baseband@03100000/hsic-baseband/pdp_ip3/pdp_ip3
UserDefinedName = Cellular (pdp_ip3)
==================================
BSD Name = pdp_ip4
Active = True
IOPathMatch = IOService:/AppleARMPE/arm-io@2240000/AppleS8000IO/usb-complex@C900000/AppleS5L8960XUSBArbitrator/usb-ehci1@03000000/AppleS5L8960XUSBEHCI@03000000/hsic-baseband@03100000/hsic-baseband/pdp_ip4/pdp_ip4
UserDefinedName = Cellular (pdp_ip4)

sysdiagnose-mobilecontainermanager.py:アンインストール情報

  • アンインストール情報を抽出します。
    • 半年程度前の情報が抽出されているのが分かります。
    • 半年の間に削除したアプリが本当に4つ程度だったかどうかは確認できませんでした。
# file path
# \logs\MobileContainerManager\PaxHeader\containermanagerd.log.0
python3 sysdiagnose-mobilecontainermanager.py -i containermanagerd.log.0
  • 結果例
Running sysdiagnose-mobilecontainermanager.py v2019-05-10 Version 1.0

7  Nov 2018 02:07:10 Removed group.com.xxx.xxx.xxx.xxx.xxxxxx [line 116]
12 Nov 2018 23:47:48 Removed group.com.xxx.xxx.xxx.xxx.xxxxxx [line 121]
19 Nov 2018 19:38:55 Removed group.com.google.YouTube [line 122]
4  Jan 2019 09:06:21 Removed group.xxx [line 150]

Found 4 group removal entries

sysdiagnose-mobilebackup.py:バックアップ情報

  • バックアップ情報を抽出します。
# file path
# \logs\MobileBackup\PaxHeader\com.apple.MobileBackup.plist
python3 sysdiagnose-mobilebackup.py -i com.apple.MobileBackup.plist
  • 結果例
Running sysdiagnose-mobilebackup.py v2019-05-10 Version 1.0

BackupStateInfo isCloud = True
BackupStateInfo Date = yyyy-mm-dd 17:37:18.428752
RestoreInfo Date = yyyy-mm-dd 13:43:12
RestoreInfo DeviceBuildVersion = 16xxxx
RestoreInfo BackupBuildVersion = 16xxxx
RestoreInfo WasCloudRestore = False

sysdiagnose-mobileactivation.py:モバイル起動およびアップグレード情報

  • モバイル起動およびアップグレード情報を抽出します。
    • 1ファイルあたり約30日分が格納されており、約5ヶ月分のデータが取得可能でした。
    • 今回の結果からはCPUがサムスン製らしいことも分かります(Hardware Model = N69uAP より)。
# file path
# \logs\MobileActivation\PaxHeader\mobileactivationd.log.0
# \logs\MobileActivation\PaxHeader\mobileactivationd.log.1
# \logs\MobileActivation\PaxHeader\mobileactivationd.log.2
# \logs\MobileActivation\PaxHeader\mobileactivationd.log.3
# \logs\MobileActivation\PaxHeader\mobileactivationd.log.4
python3 sysdiagnose-mobileactivation.py -i mobileactivation.log
  • 結果例
Running sysdiagnose-mobileactivation.py v2019-05-10 Version 1.0

25 Apr 2019 03:54:24 Mobile Activation Hardware Model = N69uAP
25 Apr 2019 03:54:24 Mobile Activation Product Type = iPhone8,4
25 Apr 2019 03:54:24 Mobile Activation Device Class = iPhone

26 Apr 2019 01:17:14 Mobile Activation Startup  [line 13]
26 Apr 2019 01:17:14 Mobile Activation Build Version = 16E227
26 Apr 2019 01:17:14 Mobile Activation Hardware Model = N69uAP
26 Apr 2019 01:17:14 Mobile Activation Product Type = iPhone8,4
26 Apr 2019 01:17:14 Mobile Activation Device Class = iPhone

(snip)

14 May 2019 07:49:00 Mobile Activation Startup  [line 322]
14 May 2019 07:49:00 Mobile Activation Build Version = 16F156
14 May 2019 07:49:00 Mobile Activation Hardware Model = N69uAP
14 May 2019 07:49:00 Mobile Activation Product Type = iPhone8,4
14 May 2019 07:49:00 Mobile Activation Device Class = iPhone

14 May 2019 07:49:00 Upgraded from 16E227 to 16F156 [line 336]

15 May 2019 19:49:32 Mobile Activation Startup  [line 340]
15 May 2019 19:49:32 Mobile Activation Build Version = 16F156
15 May 2019 19:49:32 Mobile Activation Hardware Model = N69uAP
15 May 2019 19:49:32 Mobile Activation Product Type = iPhone8,4
15 May 2019 19:49:32 Mobile Activation Device Class = iPhone

(snip)

Found 1 Upgrade entries
Found 35 Mobile Activation Startup entries

sysdiagnose-wifi-plist.py:Wi-Fiネットワーク値

  • Wi-Fiネットワーク値を抽出します。
    • 数年前にアクセスしたらしい宝塚市や京都市のWifiなども残っていましたが、接続日時などは抽出されませんでした。
    • 唯一、東急電鉄車内WiFiサービスについては数年前にも関わらず接続日時が抽出されていました。
    • 一部はデバイスの型番(IE_KEY_WPS_DEV_NAME)や製造メーカー名(IE_KEY_WPS_MANUFACTURER)なども抽出されていました。
    • 実行時に -t オプションを使うと結果を「sysdiagnose-wifi-plist-output.TSV」というタブ区切りのファイルでも出力できます。
    • なおファイル中に \00 が含まれる場合があるようで、そのままエクセルに読み込もうとすると取り込めないデータができてしまいます。バイナリエディタ等でスペース(\20)にすることで読み込めるようになります。
# file path
# \WiFi\PaxHeader\com.apple.wifi.plist
python3 sysdiagnose-wifi-plist.py -i com.apple.wifi.plist -t
  • 結果例
Running sysdiagnose-wifi-plist.py v2019-05-10 Version 1.0

=============================
SSID_STR = XXXXXX-XXX-XXX
BSSID = xx:xx:xx:xx:xx:xx
networkUsage = 9999.999999
IE_KEY_80211D_COUNTRY_CODE = JP
IE_KEY_WPS_SERIAL_NUM =  
IE_KEY_WPS_MODEL_NAME =  
IE_KEY_WPS_MANUFACTURER = XXXX, Ltd.
IE_KEY_WPS_DEV_NAME = XXXXXX
lastJoined = yyyy-mm-dd 10:28:50.624990
lastAutoJoined = yyyy-mm-dd 08:28:47.797165
enabled = True
=============================

(snip)

=============================
SSID_STR = Takarazuka_City_Wi-Fi
BSSID = xx:xx:xx:xx:xx:xx
enabled = True
=============================

(snip)

=============================
SSID_STR = KYOTO Wi-Fi
BSSID = xx:xx:xx:xx:xx:xx
enabled = True
=============================

(snip)

=============================
SSID_STR = Tokyu_Wi-Fi_Train
BSSID = xx:xx:xx:xx:xx:xx
networkUsage = 9999.999999
IE_KEY_80211D_COUNTRY_CODE = JP
lastAutoJoined = yyyy-mm-dd 11:12:44.426722
enabled = False
=============================

(snip)

Also outputted to sysdiagnose-wifi-plist-output.TSV

sysdiagnose-wifi-icloud.py:Wi-Fiネットワーク値(ICLOUD 関連ファイルから抽出)

  • ICLOUD 関連のファイルからWi-Fiネットワーク値を抽出します。
    • 先程のとは情報量が異なるようで、宝塚や京都市の追加日時も抽出されていました。
    • ただ、2つの日時がまったく同じだったので、あくまでiCloudに設定が追加された日時のようです。
    • こちらも -t オプションを使うことで「sysdiagnose-wifi-icloud-output.TSV」というタブ区切りのファイルに出力できます。
# file path
# \WiFi\PaxHeader\ICLOUD_com.apple.wifid.plist
python3 sysdiagnose-wifi-icloud.py -i ICLOUD.apple.wifid.plist -t
  • 結果例
Running sysdiagnose-wifi-icloud.py v2019-05-10 Version 1.0

==================================
Name = Takarazuka_City_Wi-Fi
added_by = xxxxxxxxxxxx
SSID_STR = Takarazuka_City_Wi-Fi
enabled = True
added_at = mmm dd yyyy 16:12:27
BSSID = xx:xx:xx:xx:xx:xx
timestamp = 999999999
==================================

(snip)

==================================
Name = Tokyu_Wi-Fi_Train
added_by = xxxxxxxxxxxx
SSID_STR = Tokyu_Wi-Fi_Train
enabled = True
added_at = mmm dd yyyy 16:12:27
BSSID = xx:xx:xx:xx:xx:xx
timestamp = 999999999
==================================

(snip)

==================================
Name = XXXXXX-XXX-XXX
added_by = xxxxxxxxxxxx
SSID_STR =  XXXXXX-XXX-XXX
enabled = True
added_at = mmm dd yyyy 18:41:30
BSSID = xx:xx:xx:xx:xx:xx
timestamp = 999999999
==================================

(snip)

Retrieved 41 wifi entries

Also outputted to sysdiagnose-wifi-icloud-output.TSV

sysdiagnose-wifi-net.py:Wi-Fiネットワーク名

  • Wi-Fiネットワーク名を抽出します。
    • ログファイルが圧縮されているので、パースするためには .log の形に解凍する必要があります。
    • コマンドの実行結果は件数のみで、詳細情報は output file と出ているファイルに記載されています。
    • ログは1ファイルにせいぜい1日分程度で、3月、4月、5月のファイルが合計6個。
    • どういう単位でログが残されているのか不明でした。
# file path
# \WiFi\wifi-buf-mm-dd-yyyy__hh_mm_ss.sss.log.tgz
python3 sysdiagnose-wifi-net.py -i wifi-buf.log
  • 結果例
Running sysdiagnose-wifi-net.py v2019-05-10 Version 1.0

=====================================================
Found 2 filtered network messages in log/vwifi-buf-04-17-2019__03_02_11.589.log
Found 0 found channel messages in log/vwifi-buf-04-17-2019__03_02_11.589.log
Found 0 background scan channel messages in log/vwifi-buf-04-17-2019__03_02_11.589.log
Found 0 MRU network messages in log/vwifi-buf-04-17-2019__03_02_11.589.log
Found 0 PPM attached still connected messages in log/vwifi-buf-04-17-2019__03_02_11.589.log
Found 117 already attached still connected messages in log/vwifi-buf-04-17-2019__03_02_11.589.log
=====================================================

Logged 10 FilteredNetworks to wifi-buf-net_filtered.TSV output file
Logged 117 AlreadyAttached to wifi-buf-net_alreadyattached.TSV output file

=====================================================

Ignored 0 malformed entries
Exiting ...

sysdiagnose-wifi-kml.py:Wi-Fiジオロケーション値からKMLを作成

  • Wi-Fiジオロケーション値を抽出しKMLを作成します。
    • ログファイルが圧縮されているので、パースするためには .log の形に解凍する必要があります。
    • コマンドの実行結果は件数のみで、詳細情報は wifi-buf-locations.kml というファイルに出力されます。
    • そのまま座標を読むこともできますが、 Google Eearth に読み込ませることで地点をプロットできます。
    • あくまで WiFi から取得するので WiFi を使っていない場所にはプロットされていないように見えました。
# file path
# \WiFi\wifi-buf-mm-dd-yyyy__hh_mm_ss.sss.log.tgz
python3 sysdiagnose-wifi-kml.py -i wifi-buf.log
  • 結果例
Running sysdiagnose-wifi-kml.py v2019-05-10 Version 1.0

=====================================================
Found 9 valid didUpdateLocation instances in log/wwifi-buf-04-17-2019__17_01_09.397.log
Found 1 valid __WiFiManagerGeoTagNetwork instances in log/wwifi-buf-04-17-2019__17_01_09.397.log
Found 1 valid __WiFiManagerLocationManagerCallback instances in log/wwifi-buf-04-17-2019__17_01_09.397.log
Found 0 valid __WiFiLocaleManagerLocationManagerCallback instances in log/wwifi-buf-04-17-2019__17_01_09.397.log
Found 0 valid WiFiLocaleManagerCheckLocale instances in log/wwifi-buf-04-17-2019__17_01_09.397.log
Found 1 valid __WiFiDeviceManagerAttemptNetworkTransition instances in log/wwifi-buf-04-17-2019__17_01_09.397.log
Found 2 valid __WiFiDeviceManagerScanPreviousNetworkChannel instances in log/wwifi-buf-04-17-2019__17_01_09.397.log
Found 0 valid WiFiManagerCopyCurrentLocation instances in log/wwifi-buf-04-17-2019__17_01_09.397.log
=====================================================

Logged 14 locations to wifi-buf-locations.kml output file

Ignored 0 malformed log entries

Google Earth で表示した結果。

f:id:soji256:20190529003316p:plain
Importing Data to Google Earth

sysdiagnose-uuid2path.py:GUIDとパス情報

  • GUIDとパス情報を抽出します。
    • 大量に抽出されていました。Slack アプリのGUIDなどが確認できました。
# file path
# \logs\tailspindb\PaxHeader\UUIDToBinaryLocations
python3 sysdiagnose-uuid2path.py -i UUIDToBinaryLocations
  • 結果例
Running sysdiagnose-uuid2path.py v2019-05-10 Version 1.0

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx, /private/var/containers/Bundle/Application/xxx-xxx-xxx-xxxx-xxxxxx/Slack.app/Frameworks/TSFKit.framework/TSFKit

(snip)

550 GUIDs found

sysdiagnose-net-ext-cache.py:アプリケーション名とGUID情報

  • アプリケーション名とGUID情報を抽出します。
    • GUID情報を出力するには-vオプションを使用してください。
    • 今回は何も抽出されませんでした。
# file path
# \logs\Networking\PaxHeader\com.apple.networkextension.cache.plist
python3 sysdiagnose-net-ext-cache.py -i com.apple.networkextension.cache.plist -v
  • 結果例
Running sysdiagnose-net-ext-cache.py v2019-05-10 Version 1.0

0 cache entries retrieved

sysdiagnose-appconduit.py:接続情報

  • 接続情報を抽出します。
# file path
# \summaries\PaxHeader\AppConduit.log
# \logs\AppConduit\PaxHeader\AppConduit.log.0
python3 sysdiagnose-appconduit.py -i AppConduit.log
  • 結果例(summaries 配下)
Running sysdiagnose-appconduit.py v2019-05-10 Version 1.0

25 May 2019 18:52:39 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Disconnected [line 48]
25 May 2019 18:52:39 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Suspending [line 49]
25 May 2019 18:52:44 - deviceXXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Now Connected [line 50]
25 May 2019 18:52:44 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Resuming [line 51]
25 May 2019 18:52:44 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Starting Reunion Sync [line 52]

Found 1 Now Connected entries
Found 1 Resuming entries
Found 1 Starting Reunion Sync entries
Found 1 Disconnected entries
Found 1 Suspending entries
  • 結果例(logs 配下)
Running sysdiagnose-appconduit.py v2019-05-10 Version 1.0

15 May 2019 21:41:15 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Disconnected [line 46]
15 May 2019 21:41:15 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Suspending [line 47]
15 May 2019 21:41:20 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Now Connected [line 48]
15 May 2019 21:41:20 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Resuming [line 49]

(snip)

24 May 2019 22:43:46 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Resuming [line 1348]
24 May 2019 22:43:46 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Starting Reunion Sync [line 1349]
25 May 2019 14:34:50 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Suspending [line 1430]
25 May 2019 14:34:50 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Disconnected [line 1431]
25 May 2019 14:34:51 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Resuming [line 1432]
25 May 2019 14:34:51 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Starting Reunion Sync [line 1433]
25 May 2019 14:34:51 - device:XXXXXX-XXXXXX-XXXXX-XXXXX-XXXXXXXX Now Connected [line 1434]

Found 16 Now Connected entries
Found 16 Resuming entries
Found 16 Starting Reunion Sync entries
Found 16 Disconnected entries
Found 16 Suspending entries

スクリプト不要で確認できる情報

Path 説明
ps.txt コマンド「/bin/ps axwww -o user,uid,pid,ppid,%cpu,%mem,pri,ni,vsz,rss,wchan,tt,stat,start,time,command」を実行して得られる情報。
WiFi\ipconfig.txt このファイルには、IP設定とデバイスのホスト名が含まれています。
WiFi\network_status.txt このファイルには、ネットワークの状態に関する情報が含まれています(IPアドレス、DNSサーバなど)。
WiFi\wifi_status.txt このファイルには、現在接続されているWi-FiネットワークのSSID、セキュリティプロトコル、チャネル、IPアドレス、ルーターアドレス、DNSアドレスなどが含まれています。

ps.txt

USER               UID   PID  PPID  %CPU %MEM PRI NI      VSZ    RSS WCHAN    TT  STAT STARTED      TIME COMMAND
root                 0     1     0   0.0  0.5  37  0  4228400  10176 -        ??  Ss   14May19   7:49.60 /sbin/launchd
root                 0    21     1   0.0  0.0   4  0  4218656    464 -        ??  Ss   14May19   0:20.03 /usr/sbin/syslogd
root                 0    22     1   0.0  0.5  31  0  4257264   9424 -        ??  Ss   14May19  30:00.62 /usr/libexec/UserEventAgent (System)
(snip)

WiFi\ipconfig.txt

op = BOOTREPLY
htype = 1
flags = 8000
hlen = 6
hops = 0
xid = 0xXXXXXXXX
secs = 0
ciaddr = 192.168.xxx.xxx
yiaddr = 192.168.xxx.xxx
siaddr = 0.0.0.0
giaddr = 0.0.0.0
chaddr = xx:xx:xx:xx:xx:xx
sname = 
file = 
options:
Options count is 9
dhcp_message_type (uint8): ACK 0x5
server_identifier (ip): 192.168.xxx.xxx
lease_time (uint32): 0xXXXXX
subnet_mask (ip): 255.255.255.0
router (ip_mult): {192.168.xxx.xxx}
domain_name_server (ip_mult): {192.168.xxx.xxx}
renewal_t1_time_value (uint32): 0xXXXXX
rebinding_t2_time_value (uint32): 0xXXXXX
end (none): 

WiFi\wifi_status.txt

# --- Network Status

    Primary IPv4         : en0 (Wi-Fi / XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
                         : 192.168.xxx.xxx
    Primary IPv6         : None
    DNS Addresses        : 192.168.xxx.xxx
    Apple                : Reachable

WiFi\network_status.txt

# --- Wi-Fi Status

    MAC Address          : xx:xx:xx:xx:xx:xx
    Interface Name       : en0
    Power                : On [On]
    Op Mode              : STA
    SSID                 : xxxxxxxxxxxxxxx
    BSSID                : xx:xx:xx:xx:xx:xx
    RSSI                 : -55 dBm
    Noise                : -90 dBm
    Tx Rate              : 390.0 Mbps
    Security             : WPA2 Personal
    PHY Mode             : 11ac
    MCS Index            : 0
    Guard Interval       : 0
    NSS                  : 0
    Channel              : 36 (80 MHz, Active)
    Country Code         : JP
    NetworkServiceID     : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
    IPv4 Config Method   : DHCP
    IPv4 Address         : 192.168.xxx.xxx
    IPv4 Router          : 192.168.xxx.xxx
    IPv6 Config Method   : Automatic
    IPv6 Address         : None
    IPv6 Router          : None
    DNS                  : 192.168.xxx.xxx
    BTC Mode             : Unavailable
    Desense              : Unavailable
    Chain Ack            : Unavailable

出力ファイル名に日時を追加して重複を防ぐ

スクリプトの中にはいくつかTSVファイルを出力するものがありますが、出力ファイル名が固定であるためパース対象のログが複数ある場合にはファイルを上書きしてしまいます。出力ファイル名に時刻情報を追加することで上書きを避けることができます。

スクリプトによって修正位置が多少異なりますが、基本的には以下のような修正を加えることで時刻(yyyymmdd-hhmmss)がファイル名に追加されます。

import datetime
(snip)
now = datetime.datetime.now()
time_str = "{0:%Y%m%d-%H%M%S}".format(now)
(snip)
    f_filtered = open("wifi-buf-net_filtered_" + time_str  + ".TSV", "w")
(snip)
    print("Logged "+ str(len(filterednetworks)) + " FilteredNetworks to wifi-buf-net_filtered_" + time_str  + ".TSV output file\n")

以上

参考文献

更新履歴

  • 2019/05/28 新規作成
  • 2019/05/29 「出力ファイル名に日時を追加して重複を防ぐ」を追加。Google Earth に位置情報を取り込んだ画像を追加。
  • 2019/08/20 スクリプトの章タイトルに抽出される情報を追記。