tshark, parte do pacote Wireshark, é somente texto.
Portanto, tshark -d udp.port==5053,dns
deve funcionar.
Na sequência de esta pergunta , como posso saber tcpdump
para usar um analisador de protocolo específico para uma porta específica?
Estou fazendo algum desenvolvimento de DNS usando um servidor de teste em execução na porta 5053, mas não consigo descobrir como dizer tcpdump
para fingir que esse é realmente o tráfego de DNS.
Eu não posso usar o wireshark - os pacotes não estão passando por uma máquina que tem uma GUI.
Pergunta interessante. Parece que deveria estar acessível com a opção:
-T Force packets selected by "expression" to be interpreted the
specified type. Currently known types are aodv (Ad-hoc On-
demand Distance Vector protocol), cnfp (Cisco NetFlow protocol),
rpc (Remote Procedure Call), rtp (Real-Time Applications proto-
col), rtcp (Real-Time Applications control protocol), snmp (Sim-
ple Network Management Protocol), tftp (Trivial File Transfer
Protocol), vat (Visual Audio Tool), and wb (distributed White
Board).
Exceto que "domínio" obviamente não é uma opção válida. Eu imagino que seja possível com uma pequena emenda ao código-fonte do tcpdump, se você fosse assim inclinado.
Atualizar
Como assim. Use a seu próprio risco:
diff -ru tcpdump-3.9.8/interface.h tcpdump-3.9.8_modified/interface.h
--- tcpdump-3.9.8/interface.h 2007-06-14 02:03:20.000000000 +0100
+++ tcpdump-3.9.8_modified/interface.h 2009-07-27 19:40:55.831913794 +0100
@@ -74,6 +74,7 @@
#define PT_CNFP 7 /* Cisco NetFlow protocol */
#define PT_TFTP 8 /* trivial file transfer protocol */
#define PT_AODV 9 /* Ad-hoc On-demand Distance Vector Protocol */
+#define PT_DOMAIN 10 /* Domain Name Service */
#ifndef min
#define min(a,b) ((a)>(b)?(b):(a))
diff -ru tcpdump-3.9.8/print-udp.c tcpdump-3.9.8_modified/print-udp.c
--- tcpdump-3.9.8/print-udp.c 2007-06-14 02:03:21.000000000 +0100
+++ tcpdump-3.9.8_modified/print-udp.c 2009-07-27 19:39:13.893442797 +0100
@@ -520,6 +520,11 @@
tftp_print(cp, length);
break;
+ case PT_DOMAIN:
+ udpipaddr_print(ip, sport, dport);
+ ns_print((const u_char *)(up + 1), length, 0);
+ break;
+
case PT_AODV:
udpipaddr_print(ip, sport, dport);
aodv_print((const u_char *)(up + 1), length,
diff -ru tcpdump-3.9.8/tcpdump.c tcpdump-3.9.8_modified/tcpdump.c
--- tcpdump-3.9.8/tcpdump.c 2007-09-26 02:59:54.000000000 +0100
+++ tcpdump-3.9.8_modified/tcpdump.c 2009-07-27 19:27:40.199449150 +0100
@@ -718,6 +718,8 @@
packettype = PT_TFTP;
else if (strcasecmp(optarg, "aodv") == 0)
packettype = PT_AODV;
+ else if (strcasecmp(optarg, "domain") == 0)
+ packettype = PT_DOMAIN;
else
error("unknown packet type '%s'", optarg);
break;
pode não ser explicitamente útil para responder à sua pergunta, mas você não precisa de uma GUI para executar o wireshark.
O X11 encapsulado por SSH permitiria que você executasse o aplicativo completo remotamente. Funciona bem com cygwin-x ou openssh, dependendo se você usa windows ou linux em sua área de trabalho.
editado: o grawity está certo, não é o encaminhamento de porta.
Ou você poderia colocar uma máquina GUI entre os dois hosts e apenas fazer uma ponte entre as duas interfaces. Eu construí um pequeno computador para esse propósito, ele ajudou a depurar todos os tipos de instalações onde o wireshark não é uma opção (por exemplo, roteadores)