如何使用Pcap.net进行mDNS查询?

问题:我正在寻找一个mDNS数据包,同时在堆栈流中搜索选项。我尝试了bonjour和一些包装器,但是成功非常有限,尤其是当我第二次请求并收到套接字绑定投诉时(当然,这可能不是我的代码)。

由于VB.net没有我所知道的真正可编辑的dnsquery,因此我在pcapdotnet的构建DNS数据包中使用DNS层,只是将数据包自己一层一层地制作。我认为这是个不错的选择,但我对如何做到却有些迷失。

这是我们想要的问题:

        q_name = new QuestionName("_axis-video._tcp.local"),
        q_type = QueryConstants.Question.QuestionType.PTR,
        q_class = QueryConstants.Question.QuestionClass.IN

这是我根据其标准编辑的BuildDNSPacket函数:

Private Shared Function BuildDnsPacket(destmac As String, domainName As String) As Packet

    'get source MAC address of PC
    Dim nic = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
    Dim source As String = nic(0).GetPhysicalAddress().ToString
    Dim sourcearray As Byte() = System.Text.Encoding.ASCII.GetBytes(source)

    'format
    Dim sourceMacStr As String = ""
    For i As Integer = 0 To sourcearray.Count - 1 Step 2
        sourceMacStr += Chr(sourcearray(i)) & Chr(sourcearray(i + 1)) & ":"
    Next

    ' Will be filled automatically.
    Dim ethernetLayer As New EthernetLayer() With { _
         .Source = New MacAddress(sourceMacStr.Substring(0, 17)), _
          .Destination = New MacAddress(destmac), _
          .EtherType = EthernetType.None _
    }

    ' Will be filled automatically.
    Dim ipV4Layer As New IpV4Layer() With { _
          .Source = New IpV4Address("1.2.3.4"), _
          .CurrentDestination = New IpV4Address(destmac), _
          .Fragmentation = IpV4Fragmentation.None, _
          .HeaderChecksum = Nothing, _
          .Identification = 123, _
          .Options = IpV4Options.None, _
          .Protocol = Nothing, _
          .Ttl = 100, _
          .TypeOfService = 0 _
    }

    ' Will be filled automatically.
    Dim udpLayer As New UdpLayer() With { _
          .SourcePort = 5353, _
          .DestinationPort = 5353, _
          .Checksum = Nothing, _
          .CalculateChecksumValue = False _
    }

    Dim dnsLayer As New DnsLayer() With { _
          .Id = 0, _
          .IsResponse = False, _
          .OpCode = DnsOpCode.Query, _
          .IsAuthoritativeAnswer = False, _
          .IsTruncated = False, _
          .IsRecursionDesired = False, _
          .IsRecursionAvailable = False, _
          .FutureUse = False, _
          .IsAuthenticData = False, _
          .IsCheckingDisabled = False, _
          .ResponseCode = DnsResponseCode.NoError, _
          .Queries = {New DnsQueryResourceRecord(New DnsDomainName(domainName), DnsType.Ptr, DnsClass.Any)}, _
          .Answers = Nothing, _
          .Authorities = Nothing, _
          .Additionals = Nothing, _
          .DomainNameCompressionMode = DnsDomainNameCompressionMode.All _
    }


    Dim builder As New PacketBuilder(ethernetLayer, ipV4Layer, udpLayer, dnsLayer)

    Return builder.Build(DateTime.Now)
End Function

主要区别在于我将DnsType更改为PTR,端口更改为5353。

问题:我还应该添加或更改使其成为mDNS吗?我可以在domainName中输入什么?我应该改变dnsclass吗?

绝对欢迎所有或任何建议。

我正在回答我的问题,以防其他需要在vb.net中执行mDNS的人需要这样做:

解决方案:我不需要向DNS层添加任何内容即可完成这项工作。我将DNS层更改为以下内容:

   Dim dnsLayer As New DnsLayer() With { _
          .Id = 0, _
          .IsResponse = False, _
          .OpCode = DnsOpCode.Query, _
          .IsAuthoritativeAnswer = False, _
          .IsTruncated = False, _
          .IsRecursionDesired = False, _
          .IsRecursionAvailable = False, _
          .FutureUse = False, _
          .IsAuthenticData = False, _
          .IsCheckingDisabled = False, _
          .ResponseCode = DnsResponseCode.NoError, _
          .Queries = {New DnsQueryResourceRecord(New DnsDomainName(domainName), DnsType.Ptr, DnsClass.Any)}, _
          .Answers = Nothing, _
          .Authorities = Nothing, _
          .Additionals = Nothing, _
          .DomainNameCompressionMode = DnsDomainNameCompressionMode.All _
    }

我将Ipv4层的输出地址设置为“ 224.0.0.251”的多播地址,将端口更改为5353,并使用上面列出的问题的域名。

这是显示响应的接线图: 在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用SharpPcap或Pcap.NET从开放的Wi-Fi热点捕获软件包?

来自分类Dev

使用Pcap.Net获取Packete网址

来自分类Dev

mDNS和LLMNR查询使用与tcp DNS相同的格式吗?

来自分类Dev

Net Net MVC点:如何从视图进行查询?

来自分类Dev

如何在我们自己的dpdk应用程序中使用dpdk的librte_pmd_pcap进行数据包捕获?

来自分类Dev

在Windows 10上使用Strawberry Perl安装Net :: Pcap

来自分类Dev

如何使用变量进行查询

来自分类Dev

如何从pcap_loop()或pcap_dispatch()返回而不在回调函数中使用pcap_breakloop()

来自分类Dev

与可变的字符串输入相比,如何使用vb.net在mysql中使用LIKE子句进行查询?

来自分类Dev

如何使用子查询进行范围

来自分类Dev

锂框架如何使用OR进行查询

来自分类Dev

如何使用“喜欢”进行续集查询?

来自分类Dev

如何使用Squeel进行嵌套查询?

来自分类Dev

Elasticsearch如何使用通配符进行OR查询

来自分类Dev

如何使用CachedRowSet进行SQL查询?

来自分类Dev

如何使用Spark Sql进行递归查询

来自分类Dev

如何使用Firebase通过查询进行订购

来自分类Dev

如何使用datetimepicker进行SQL搜索查询

来自分类Dev

如何使用对象的可选键进行查询?

来自分类Dev

如何使用Postgres进行此查询?

来自分类Dev

如何使用子查询进行范围

来自分类Dev

如何使用Prometheus进行此查询?

来自分类Dev

如何使用 SQLAlchemy 进行嵌套查询?

来自分类Dev

它如何使用别名进行 mysql 查询?

来自分类Dev

如何使用 Cakephp 对查询进行连接?

来自分类Dev

使用 Python 搜索 PCAP 文件并返回有关搜索查询的关键信息

来自分类Dev

使用asyncdynamo进行查询

来自分类Dev

如何使用UNION ALL进行查询查询

来自分类Dev

我如何使用Join而不是子查询进行后续查询?

Related 相关文章

  1. 1

    如何使用SharpPcap或Pcap.NET从开放的Wi-Fi热点捕获软件包?

  2. 2

    使用Pcap.Net获取Packete网址

  3. 3

    mDNS和LLMNR查询使用与tcp DNS相同的格式吗?

  4. 4

    Net Net MVC点:如何从视图进行查询?

  5. 5

    如何在我们自己的dpdk应用程序中使用dpdk的librte_pmd_pcap进行数据包捕获?

  6. 6

    在Windows 10上使用Strawberry Perl安装Net :: Pcap

  7. 7

    如何使用变量进行查询

  8. 8

    如何从pcap_loop()或pcap_dispatch()返回而不在回调函数中使用pcap_breakloop()

  9. 9

    与可变的字符串输入相比,如何使用vb.net在mysql中使用LIKE子句进行查询?

  10. 10

    如何使用子查询进行范围

  11. 11

    锂框架如何使用OR进行查询

  12. 12

    如何使用“喜欢”进行续集查询?

  13. 13

    如何使用Squeel进行嵌套查询?

  14. 14

    Elasticsearch如何使用通配符进行OR查询

  15. 15

    如何使用CachedRowSet进行SQL查询?

  16. 16

    如何使用Spark Sql进行递归查询

  17. 17

    如何使用Firebase通过查询进行订购

  18. 18

    如何使用datetimepicker进行SQL搜索查询

  19. 19

    如何使用对象的可选键进行查询?

  20. 20

    如何使用Postgres进行此查询?

  21. 21

    如何使用子查询进行范围

  22. 22

    如何使用Prometheus进行此查询?

  23. 23

    如何使用 SQLAlchemy 进行嵌套查询?

  24. 24

    它如何使用别名进行 mysql 查询?

  25. 25

    如何使用 Cakephp 对查询进行连接?

  26. 26

    使用 Python 搜索 PCAP 文件并返回有关搜索查询的关键信息

  27. 27

    使用asyncdynamo进行查询

  28. 28

    如何使用UNION ALL进行查询查询

  29. 29

    我如何使用Join而不是子查询进行后续查询?

热门标签

归档