• Home
  • Raw
  • Download

Lines Matching +full:srv +full:- +full:ipv4 +full:- +full:single +full:- +full:target

1 /* -*- Mode: C; tab-width: 4 -*-
3 * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved.
9 * http://www.apache.org/licenses/LICENSE-2.0
26 * thinking that variables x and y are both of type "char*" -- and anyone who doesn't
49 // Both mDNS.c and mDNSWin32.h declare UDPSocket_struct type resulting in a compile-time error, so
78 // These are meta-categories;
131 #define ExactlyOneFilter (Filters && !Filters->next)
143 // Special version of printf that knows how to print IP addresses, DNS-format name strings, etc.
185 #define HostEntryTotalPackets(H) ((H)->pkts[HostPkt_Q] + (H)->pkts[HostPkt_L] + (H)->pkts[HostPkt_R…
201 for (i = 0; i < list->num; i++) in FindHost()
203 HostEntry *entry = list->hosts + i; in FindHost()
204 if (mDNSSameAddress(addr, &entry->addr)) in FindHost()
215 if (list->num >= list->max) in AddHost()
217 long newMax = list->max + 64; in AddHost()
218 HostEntry *newHosts = realloc(list->hosts, newMax * sizeof(HostEntry)); in AddHost()
221 list->max = newMax; in AddHost()
222 list->hosts = newHosts; in AddHost()
225 entry = list->hosts + list->num++; in AddHost()
227 entry->addr = *addr; in AddHost()
228 for (i=0; i<HostPkt_NumTypes; i++) entry->pkts[i] = 0; in AddHost()
229 entry->totalops = 0; in AddHost()
230 for (i=0; i<OP_NumTypes; i++) entry->stat[i] = 0; in AddHost()
231 entry->hostname.c[0] = 0; in AddHost()
232 entry->revname.c[0] = 0; in AddHost()
233 entry->HIHardware.c[0] = 0; in AddHost()
234 entry->HISoftware.c[0] = 0; in AddHost()
235 entry->NumQueries = 0; in AddHost()
237 if (entry->addr.type == mDNSAddrType_IPv4) in AddHost()
239 mDNSv4Addr ip = entry->addr.ip.v4; in AddHost()
241 …// Note: This is reverse order compared to a normal dotted-decimal IP address, so we can't use our… in AddHost()
242 …mDNS_snprintf(buffer, sizeof(buffer), "%d.%d.%d.%d.in-addr.arpa.", ip.b[3], ip.b[2], ip.b[1], ip.b… in AddHost()
243 MakeDomainNameFromDNSNameString(&entry->revname, buffer); in AddHost()
254 HostList *list = (addr->type == mDNSAddrType_IPv4) ? &IPv4HostList : &IPv6HostList; in GotPacketFromHost()
259 if (id.NotAnInteger != 0xFFFF) entry->pkts[t]++; in GotPacketFromHost()
266 if (!entry->hostname.c[0]) in RecordHostInfo()
268 if (pktrr->rrtype == kDNSType_A || pktrr->rrtype == kDNSType_AAAA) in RecordHostInfo()
271 entry->NumQueries = 0; in RecordHostInfo()
272 AssignDomainName(&entry->hostname, pktrr->name); in RecordHostInfo()
275 if (pktrr->rrtype == kDNSType_PTR) in RecordHostInfo()
276 if (SameDomainName(&entry->revname, pktrr->name)) in RecordHostInfo()
278 entry->NumQueries = 0; in RecordHostInfo()
279 AssignDomainName(&entry->hostname, &pktrr->rdata->u.name); in RecordHostInfo()
282 else if (pktrr->rrtype == kDNSType_HINFO) in RecordHostInfo()
284 RDataBody *rd = &pktrr->rdata->u; in RecordHostInfo()
285 mDNSu8 *rdend = (mDNSu8 *)rd + pktrr->rdlength; in RecordHostInfo()
286 mDNSu8 *hw = rd->txt.c; in RecordHostInfo()
290 AssignDomainName(&entry->hostname, pktrr->name); in RecordHostInfo()
291 mDNSPlatformMemCopy(entry->HIHardware.c, hw, 1 + (mDNSu32)hw[0]); in RecordHostInfo()
292 mDNSPlatformMemCopy(entry->HISoftware.c, sw, 1 + (mDNSu32)sw[0]); in RecordHostInfo()
303 const mDNSAddr *target = &entry->addr; in SendUnicastQuery() local
306 entry->LastQuery = m->timenow; in SendUnicastQuery()
307 entry->NumQueries++; in SendUnicastQuery()
309 // Note: When there are multiple mDNSResponder agents running on a single machine in SendUnicastQuery()
313 if (entry->NumQueries > 2) in SendUnicastQuery()
315 target = &AllDNSLinkGroup_v4; in SendUnicastQuery()
319 //mprintf("%#a Q\n", target); in SendUnicastQuery()
323 …mDNSSendDNSMessage(&mDNSStorage, &query, qptr, InterfaceID, mDNSNULL, target, MulticastDNSPort, mD… in SendUnicastQuery()
329 if (entry->NumQueries >= 4) return; in AnalyseHost()
332 if (entry->NumQueries && m->timenow - entry->LastQuery < mDNSPlatformOneSecond) return; in AnalyseHost()
335 if (!entry->hostname.c[0]) in AnalyseHost()
337 if (entry->revname.c[0]) in AnalyseHost()
339 SendUnicastQuery(m, entry, &entry->revname, kDNSType_PTR, InterfaceID); in AnalyseHost()
340 //mprintf("%##s PTR %d\n", entry->revname.c, entry->NumQueries); in AnalyseHost()
344 else if (!entry->HIHardware.c[0]) in AnalyseHost()
346 SendUnicastQuery(m, entry, &entry->hostname, kDNSType_HINFO, InterfaceID); in AnalyseHost()
347 //mprintf("%##s HINFO %d\n", entry->hostname.c, entry->NumQueries); in AnalyseHost()
353 return (int)(HostEntryTotalPackets((HostEntry *)p2) - HostEntryTotalPackets((HostEntry *)p1)); in CompareHosts()
358 HostEntry *e, *end = &list->hosts[(max < list->num) ? max : list->num]; in ShowSortedHostList()
359 qsort(list->hosts, list->num, sizeof(HostEntry), CompareHosts); in ShowSortedHostList()
360 …if (list->num) mprintf("\n%-25s%s%s\n", "Source Address", OPBanner, " Pkts Query LegacyQ R… in ShowSortedHostList()
361 for (e = &list->hosts[0]; e < end; e++) in ShowSortedHostList()
363 int len = mprintf("%#-25a", &e->addr); in ShowSortedHostList()
365 mprintf("%8lu %8lu %8lu %8lu %8lu %8lu %8lu", e->totalops, in ShowSortedHostList()
366 e->stat[OP_probe], e->stat[OP_goodbye], in ShowSortedHostList()
367 e->stat[OP_browseq], e->stat[OP_browsea], in ShowSortedHostList()
368 e->stat[OP_resolveq], e->stat[OP_resolvea]); in ShowSortedHostList()
370 HostEntryTotalPackets(e), e->pkts[HostPkt_Q], e->pkts[HostPkt_L], e->pkts[HostPkt_R]); in ShowSortedHostList()
371 if (e->pkts[HostPkt_B]) mprintf("Bad: %8lu", e->pkts[HostPkt_B]); in ShowSortedHostList()
373 if (!e->HISoftware.c[0] && e->NumQueries > 2) in ShowSortedHostList()
374 mDNSPlatformMemCopy(&e->HISoftware, "\x27*** Unknown (Jaguar, Windows, etc.) ***", 0x28); in ShowSortedHostList()
375 if (e->hostname.c[0] || e->HIHardware.c[0] || e->HISoftware.c[0]) in ShowSortedHostList()
376 mprintf("%##-45s %#-14s %#s\n", e->hostname.c, e->HIHardware.c, e->HISoftware.c); in ShowSortedHostList()
386 const mDNSu8 *src = fqdn->c; in ExtractServiceType()
387 mDNSu8 *dst = srvtype->c; in ExtractServiceType()
413 if (rrtype == kDNSType_SRV || rrtype == kDNSType_TXT) op = op - OP_browsegroup + OP_resolvegroup; in recordstat()
419 while (*s && !SameDomainName(&(*s)->srvtype, &srvtype)) s = &(*s)->next; in recordstat()
424 if (!*s) exit(-1); in recordstat()
425 (*s)->next = NULL; in recordstat()
426 (*s)->srvtype = srvtype; in recordstat()
427 (*s)->printed = 0; in recordstat()
428 (*s)->totalops = 0; in recordstat()
429 for (i=0; i<OP_NumTypes; i++) (*s)->stat[i] = 0; in recordstat()
432 (*s)->totalops++; in recordstat()
433 (*s)->stat[op]++; in recordstat()
436 entry->totalops++; in recordstat()
437 entry->stat[op]++; in recordstat()
449 for (s = stats; s; s=s->next) in printstats()
450 if (!s->printed && max < s->totalops) in printstats()
451 { m = s; max = s->totalops; } in printstats()
453 m->printed = mDNStrue; in printstats()
454 if (i==0) mprintf("%-25s%s\n", "Service Type", OPBanner); in printstats()
455 mprintf("%##-25s%8d %8d %8d %8d %8d %8d %8d\n", m->srvtype.c, m->totalops, m->stat[OP_probe], in printstats()
456 …m->stat[OP_goodbye], m->stat[OP_browseq], m->stat[OP_browsea], m->stat[OP_resolveq], m->stat[OP_re… in printstats()
464 for (i = 0; i < query->h.numAuthorities; i++) in FindUpdate()
467 ptr = GetLargeResourceRecord(m, query, ptr, end, q->InterfaceID, kDNSRecordTypePacketAuth, pkt); in FindUpdate()
469 …if (m->rec.r.resrec.RecordType != kDNSRecordTypePacketNegative && ResourceRecordAnswersQuestion(&p… in FindUpdate()
476 const char *const ptype = (msg->h.flags.b[0] & kDNSFlag0_QR_Response) ? "-R- " : in DisplayPacketHeader()
477 (srcport.NotAnInteger == MulticastDNSPort.NotAnInteger) ? "-Q- " : "-LQ-"; in DisplayPacketHeader()
488 mprintf("%#-16a %s Q:%3d Ans:%3d Auth:%3d Add:%3d Size:%5d bytes", in DisplayPacketHeader()
489 …srcaddr, ptype, msg->h.numQuestions, msg->h.numAnswers, msg->h.numAuthorities, msg->h.numAdditiona… in DisplayPacketHeader()
491 if (msg->h.id.NotAnInteger) mprintf(" ID:%u", mDNSVal16(msg->h.id)); in DisplayPacketHeader()
495 if (msg->h.flags.b[0] & kDNSFlag0_TC) in DisplayPacketHeader()
497 if (msg->h.flags.b[0] & kDNSFlag0_QR_Response) mprintf(" Truncated"); in DisplayPacketHeader()
510 RDataBody *rd = &pktrr->rdata->u; in DisplayResourceRecord()
511 mDNSu8 *rdend = (mDNSu8 *)rd + pktrr->rdlength; in DisplayResourceRecord()
512 …int n = mprintf("%#-16a %-5s %-5s%5lu %##s -> ", srcaddr, op, DNSTypeName(pktrr->rrtype), pktrr->r… in DisplayResourceRecord()
514 …if (pktrr->RecordType == kDNSRecordTypePacketNegative) { mprintf("**** ERROR: FAILED TO READ RDATA… in DisplayResourceRecord()
518 switch(pktrr->rrtype) in DisplayResourceRecord()
520 case kDNSType_A: n += mprintf("%.4a", &rd->ipv4); break; in DisplayResourceRecord()
521 case kDNSType_PTR: n += mprintf("%##.*s", MaxWidth - n, rd->name.c); break; in DisplayResourceRecord()
524 mDNSu8 *t = rd->txt.c; in DisplayResourceRecord()
545 n += mprintf("%.*s", MaxWidth - n, buffer); in DisplayResourceRecord()
547 case kDNSType_AAAA: n += mprintf("%.16a", &rd->ipv6); break; in DisplayResourceRecord()
548 case kDNSType_SRV: n += mprintf("%##s:%d", rd->srv.target.c, mDNSVal16(rd->srv.port)); break; in DisplayResourceRecord()
554 …DNSu32 striplen = mDNS_snprintf(b, MaxMsg-1, "%4d %##s %s ", pktrr->rdlength, pktrr->name->c, DNST… in DisplayResourceRecord()
555 GetRRDisplayString_rdb(pktrr, &pktrr->rdata->u, b); in DisplayResourceRecord()
556 n += mprintf("%.*s", MaxWidth - n, b + striplen); in DisplayResourceRecord()
561 if (rd->nsec.bitmap[i>>3] & (128 >> (i&7))) in DisplayResourceRecord()
565 mDNSu8 *s = rd->data; in DisplayResourceRecord()
581 n += mprintf("%.*s", MaxWidth - n, buffer); in DisplayResourceRecord()
605 mprintf("%#-16a **** ERROR: FAILED TO READ %s **** \n", srcaddr, msg); in DisplayError()
613 const mDNSu8 *ptr = msg->data; in DisplayQuery()
616 HostEntry *entry = GotPacketFromHost(srcaddr, MQ ? HostPkt_Q : HostPkt_L, msg->h.id); in DisplayQuery()
620 if (msg->h.id.NotAnInteger != 0xFFFF) in DisplayQuery()
625 for (i=0; i<msg->h.numQuestions; i++) in DisplayQuery()
648 mprintf("%#-16a %-5s %-5s %##s\n", srcaddr, ptype, DNSTypeName(q.qtype), q.qname.c); in DisplayQuery()
649 if (msg->h.id.NotAnInteger != 0xFFFF) recordstat(entry, &q.qname, OP_query, q.qtype); in DisplayQuery()
653 for (i=0; i<msg->h.numAnswers; i++) in DisplayQuery()
660 // In the case of queries with long multi-packet KA lists, we count each subsequent KA packet in DisplayQuery()
661 // the same as a single query, to more accurately reflect the burden on the network in DisplayQuery()
662 …// (A query with a six-packet KA list is *at least* six times the burden on the network as a singl… in DisplayQuery()
663 if (msg->h.numQuestions == 0 && i == 0) in DisplayQuery()
667 for (i=0; i<msg->h.numAuthorities; i++) in DisplayQuery()
677 for (i=0; i<msg->h.numAdditionals; i++) in DisplayQuery()
692 const mDNSu8 *ptr = msg->data; in DisplayResponse()
693 HostEntry *entry = GotPacketFromHost(srcaddr, HostPkt_R, msg->h.id); in DisplayResponse()
697 if (msg->h.id.NotAnInteger != 0xFFFF) NumPktR++; in DisplayResponse()
699 for (i=0; i<msg->h.numQuestions; i++) in DisplayResponse()
706 …mprintf("%#-16a (?) **** ERROR: SHOULD NOT HAVE Q IN mDNS RESPONSE **** %-5s %##s\n", srcaddr, D… in DisplayResponse()
708 mprintf("%#-16a (Q) %-5s %##s\n", srcaddr, DNSTypeName(q.qtype), q.qname.c); in DisplayResponse()
711 for (i=0; i<msg->h.numAnswers; i++) in DisplayResponse()
720 …if (msg->h.id.NotAnInteger != 0xFFFF) recordstat(entry, pkt.r.resrec.name, OP_answer, pkt.r.resrec… in DisplayResponse()
731 for (i=0; i<msg->h.numAuthorities; i++) in DisplayResponse()
736 mprintf("%#-16a (?) **** ERROR: SHOULD NOT HAVE AUTHORITY IN mDNS RESPONSE **** %-5s %##s\n", in DisplayResponse()
737 srcaddr, DNSTypeName(pkt.r.resrec.rrtype), pkt.r.resrec.name->c); in DisplayResponse()
740 for (i=0; i<msg->h.numAdditionals; i++) in DisplayResponse()
759 HostEntry *entry = GotPacketFromHost(srcaddr, HostPkt_R, msg->h.id); in ProcessUnicastResponse()
762 for (i=0; i<msg->h.numAnswers + msg->h.numAuthorities + msg->h.numAdditionals; i++) in ProcessUnicastResponse()
773 if (!Filters) return(srcaddr->type == mDNSAddrType_IPv4); in AddressMatchesFilterList()
774 for (f=Filters; f; f=f->next) if (mDNSSameAddress(srcaddr, &f->FilterAddr)) return(mDNStrue); in AddressMatchesFilterList()
783 const mDNSu8 QR_OP = (mDNSu8)(msg->h.flags.b[0] & kDNSFlag0_QROP_Mask); in mDNSCoreReceive()
784 mDNSu8 *ptr = (mDNSu8 *)&msg->h.numQuestions; in mDNSCoreReceive()
790 // Read the integer parts which are in IETF byte-order (MSB first, LSB second) in mDNSCoreReceive()
791 msg->h.numQuestions = (mDNSu16)((mDNSu16)ptr[0] << 8 | ptr[1]); in mDNSCoreReceive()
792 msg->h.numAnswers = (mDNSu16)((mDNSu16)ptr[2] << 8 | ptr[3]); in mDNSCoreReceive()
793 msg->h.numAuthorities = (mDNSu16)((mDNSu16)ptr[4] << 8 | ptr[5]); in mDNSCoreReceive()
794 msg->h.numAdditionals = (mDNSu16)((mDNSu16)ptr[6] << 8 | ptr[7]); in mDNSCoreReceive()
796 // For now we're only interested in monitoring IPv4 traffic. in mDNSCoreReceive()
813 debugf("Unknown DNS packet type %02X%02X (ignored)", msg->h.flags.b[0], msg->h.flags.b[1]); in mDNSCoreReceive()
814 GotPacketFromHost(srcaddr, HostPkt_B, msg->h.id); in mDNSCoreReceive()
866 { tv_interval.tv_usec += 1000000; tv_interval.tv_sec--; } in mDNSNetMonitor()
867 tv_interval.tv_sec -= tv_start.tv_sec; in mDNSNetMonitor()
868 tv_interval.tv_usec -= tv_start.tv_usec; in mDNSNetMonitor()
893 if (IPv4HostList.num) mprintf(" %ld (IPv4)", IPv4HostList.num); in mDNSNetMonitor()
937 if (i+1 < argc && !strcmp(argv[i], "-i") && atoi(argv[i+1])) in main()
961 if (h) a.ip.v4.NotAnInteger = *(long*)h->h_addr; in main()
966 f->FilterAddr = a; in main()
967 f->next = Filters; in main()
978 fprintf(stderr, "Usage: %s [-i index] [host]\n", progname); in main()
979 fprintf(stderr, "Optional [-i index] parameter displays only packets from that interface index\n"); in main()
982 fprintf(stderr, "\nPer-packet header output:\n"); in main()
983 …fprintf(stderr, "-Q- Multicast Query from mDNS client that accepts multicast responses\… in main()
984 fprintf(stderr, "-R- Multicast Response packet containing answers/announcements\n"); in main()
985 …fprintf(stderr, "-LQ- Multicast Query from legacy client that does *not* listen for mult… in main()
988 fprintf(stderr, "\nPer-record display:\n"); in main()
1009 return(-1); in main()