私は現在、2つのループを同時に実行するPython2.6のコードを持っています。コードはgps(gpsd)モジュールとscapyモジュールを使用します。基本的に、最初の関数(gpsInfo)には、GPSデバイスからGPSデータを取得し、位置をコンソールに書き込む継続的なwhileループが含まれています。2番目の関数(ClientDetect)は継続的なループで実行され、wifiデータの空気をスニッフィングし、特定のパケットが見つかったときにこのデータを出力します。GPS 1つをバックグラウンドスレッドとして実行して、これら2つのループをスレッド化しました。私が探しているのは(そしてその方法を見つけるのに5日間苦労していた)、ClientDetect関数が一致を見つけてそれぞれの情報を出力するときに、そのヒットが行われたときのそれぞれのGPS座標も印刷されるようにするためですコンソール。現在、私のコードは機能していないようです。
observedclients = [] p = "" # Relate to wifi packet session =
gps.gps(mode=gps.WATCH_NEWSTYLE)
def gpsInfo():
while True:
session.poll()
time.sleep(5)
if gps.PACKET_SET:
session.stream
print session.fix.latitude + session.fix.longitude
time.sleep(0.1)
def WifiDetect(p):
if p.haslayer(Dot11):
if p.type == 0 and p.subtype in stamgmtstypes:
if p.addr2 not in observedclients:
print p.addr2
observedclients.append(p.addr2)
def ActivateWifiDetect():
sniff(iface="mon0", prn=WifiDetect)
if __name__ == '__main__':
t = threading.Thread(target=gpsInfo)
t.start()
WifiDetect()
誰かが私のコードを見て、Wi-Fiがヒットしたときに、GPS座標も印刷するために、データを同時に取得するのに最適な方法を確認できますか?誰かがキューイングの実装について言及しましたが、私はこれを調査しましたが、実装方法に関しては役に立ちませんでした。
前述のように、このコードの目的は、GPSと特定のwifiパケットの両方をスキャンし、検出されたときに、パケットと検出された場所に関連する詳細を印刷することです。