我知道之前已经提出了类似的问题,但即使在我的谷歌搜索之后,我仍然完全迷失了.
我写了一个小的Windows服务,做什么我的主要应用程序使用在后台线程做(这是有道理将其移动到一个单独的服务有以下几个原因).
当后台线程作为我的应用程序的一部分运行时,它会在每次完成工作时触发事件(在这种情况下更新数据库),并且我将使用该事件的时间戳来获取更新窗口的相应信息.我不认为具体内容是相关的,但如果您需要更多详细信息,请告诉我.
既然我已经将数据库填充的东西作为服务运行,那么问题就变成了:我如何替换事件过去所做的事情?
换句话说,将基本DateTime从我的服务传递到我的应用程序的最简单和/或最有效的方法是什么?
我之前从未做过任何IPC,但是开始阅读并彻底搞砸了.Named Pipes似乎是我最好的选择,到目前为止,但我一直无法找到任何可以帮助我了解它们的功能......所有我发现有不良的注释的代码块,或者去"教程" 的方式更深比我更需要,没有明确涵盖基础知识.
所以,如果没有能够建立一个良好的基础,我有点卡住了.实现简单通信的最佳方法是什么,它可以完成我的事件以及我在哪里可以学习该方法的基础知识?
编辑:
一如既往,每个人都在摇滚,感谢所有快速反应.Gerrie的链接结果正是我所需要的(虽然我不知道那是我当时需要的).
我一直在研究如何让一个OpenWRT路由器记录WiFi探测请求到MySQL数据库(它存储每个探测请求数据包的MAC地址和RSSI信息以及其他特定于路由器的数据).
在研究了libpcap之后,我已经能够拼凑出一个基本的小程序,只需使用过滤器表达式('wlan subtype probe-req')在监视器接口(mon0)上嗅探数据包,然后输出原始数据包十六进制 有了libpcap在线提供的信息,这部分相当简单.
现在我就陷入困境:如何解析WiFi数据包以检索我正在寻找的信息(RSSI和源MAC地址)?
要说清楚,我不是要求代码去做(虽然我不会抱怨,如果你想提供一些:D).我只是在寻找某种指导来理解哪个字节是哪个 - 如果你愿意的话,那就是WiFi数据包路线图.
有一些很好的教程可用于解析通过以太网进入的数据包,但是我无法找到任何可以帮助解析与WiFi特定相关的标头.我假设这将是一个非常简单的过程 - 只需抓取RSSI和源MAC的相关字节 - 但同样,我还没有找到任何关于哪个字节的文档.
我知道这已经完成了,但我会说实话:在查看tcpdump的源代码时,我完全迷失了.
那么,有没有人知道如何解析WiFi数据包的良好资源?
干杯
编辑:更具体的答案
RSSI位于RadioTap标题中(嗯,在Linux上).使用radiotap-parser.c以及它所依赖的文件(在与我链接的文件相同的目录中找到)将RSSI从数据包中拉出是相当简单的.如果有人在使用radiotap-parser.c时遇到问题,请随时与我们取得联系.
radiotap函数使得拉出源MAC地址非常简单,因为radiotap头结构包含radiotap头(it_len)的长度,它是可变的.因为我只解析具有固定长度的探测请求(在这里查看第17页),所以只需要指向一个指针packet + it_len + 10(源MAC地址在MAC帧开始后10个字节开始,从哪里开始) radiotap标题结束).从该指针开始的6个字节addr2位于802.11帧中(同样,请参见此处的第17页).
给定一个列表列表(假设有5个列表,要有一个可以使用的实数),我可以相对轻松地找到所有5个列表共有的项(参见使用IEnumerable.Intersect()的多个列表的交集)以下代码的变体:
var list1 = new List<int>() { 1, 2, 3 };
var list2 = new List<int>() { 2, 3, 4 };
var list3 = new List<int>() { 3, 4, 5 };
var listOfLists = new List<List<int>>() { list1, list2, list3 };
var intersection = listOfLists.Aggregate((previousList, nextList) => previousList.Intersect(nextList).ToList());
Run Code Online (Sandbox Code Playgroud)
现在让我们说intersection最终包含0个项目.很可能有一些对象是4/5列表中常见的.我将如何以最有效的方式找到它们?
我知道我可以运行4个列表的所有组合并保存所有结果,但该方法不能很好地扩展(这最终必须在大约40个列表上完成).
如果4个列表中没有共同的项目,那么将重复搜索以查找3/5列表共有的项目等.在视觉上,这可以通过网格点列表来表示,我们正在搜索最多的点交叠.
有任何想法吗?
编辑:也许最好是查看每个点并跟踪它在每个列表中出现的次数,然后创建出现次数最多的点列表?