How might I perform DNS lookups using C/C++ on Linux?

后端 未结 7 1652
太阳男子
太阳男子 2020-12-19 01:57

How do I get similar functionality to the host command using a c api (or any other language for that matter)? I need more information than just an IP address gi

相关标签:
7条回答
  • 2020-12-19 02:35

    I know that the question is old, but I have long searched a dns library, and all answers here just stubs me. I think libraries like adns/udns have written not for human beings. And FireDNS for a long time have not working download links.

    I have found poslib as the best dns library with very easy interface.

    0 讨论(0)
  • 2020-12-19 02:40

    I'd suggest FireDNS. It's a very fast C library for all kinds of dns queries.

    0 讨论(0)
  • 2020-12-19 02:41

    You can also try c-ares library https://c-ares.haxx.se/, which allows to send asynchronous DNS queries. It also comes with adig - its own version of dig utility for querying DNS. You can check it to see how to parse DNS reply: adig.c source

    0 讨论(0)
  • 2020-12-19 02:44

    I don't think there is a function in the C standard library for this, but many scripting languages do have this functionality 'built in'. For example, Perl has the Net::DNS package:

    use Net::DNS;
    my @mx = mx("example.com");
    foreach $host (@mx) {
      print $host;
    }
    

    If you need to do this in C, a quick google shows up a few C libraries out there which you can use:

    • adns
    • udns
    • dns.c
    • FireDNS (as mentioned by ko-dos)
    0 讨论(0)
  • 2020-12-19 02:52

    And I would add, unless you're writing a mail relay you almost certainly shouldn't be looking up MX records - you should be passing the mail on to a user-configured mail relay instead.

    0 讨论(0)
  • 2020-12-19 02:56

    If a blocking (synchronous) query is ok, just use res_query(), and link your program with -lresolv.

     len = res_query(host, C_IN, T_MX, &answer, sizeof(answer));
    
    0 讨论(0)
提交回复
热议问题