0% encontró este documento útil (0 votos)
211 vistas12 páginas

Herramientas SNMP

Las principales herramientas SNMP son agentes SNMP como Net-SNMP, que permiten monitorizar variables de red en dispositivos GNU/Linux, y herramientas de gestión que permiten observar estas variables de los agentes. Net-SNMP es un popular agente SNMP de código abierto que puede instalarse en GNU/Linux para permitir la monitorización remota y también programar respuestas a alertas SNMP. Se configura mediante archivos que definen el acceso, vistas y grupos de seguridad.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
211 vistas12 páginas

Herramientas SNMP

Las principales herramientas SNMP son agentes SNMP como Net-SNMP, que permiten monitorizar variables de red en dispositivos GNU/Linux, y herramientas de gestión que permiten observar estas variables de los agentes. Net-SNMP es un popular agente SNMP de código abierto que puede instalarse en GNU/Linux para permitir la monitorización remota y también programar respuestas a alertas SNMP. Se configura mediante archivos que definen el acceso, vistas y grupos de seguridad.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

HERRAMIENTAS SNMP

Mencione y describa las principales herramientas SNMP.

1. Introduccin a SNMP
SNMP (Simple Network Management Protocol) es el protocolo definido por los comits tcnicos de
Internet para ser utilizado como una herramienta de gestin de los distintos dispositivos en
cualquier red. El funcionamiento de SNMP es sencillo, como dice el protocolo, aunque su
implementacin es tremendamente compleja. SNMP utiliza la capa de transporte de TCP/IP
mediante el envo de datagramas UPD, sin embargo, el hecho de usar UDP hace que el protocolo
no sea fiable (en UDP no se garantiza la recepcin de los paquetes enviados, como en TCP).
El protocolo SNMP est cubierto por un gran nmero de RFCs (Request For Comments), entre
ellos el RFC 1157, 1215 (versin 1), del 1441 al 1452 (versin 2), del 2271 al 2275 y del 2570 al
2575

(para

SNMP

v3).

El

listado

completo

est

disponible

en

[Link]
SNMP se basa en un conglomerado de agentes. Cada agente es un elemento de la red que ofrece
unas determinadas variables al exterior, para ser ledas o modificadas. Asimismo, un agente puede
enviar "alertas" a otros agentes para avisar de eventos que tengan lugar. Generalmente se llama
"gestor" al agente encargado de recibir estos eventos.
El esquema es sencillo, sin embargo su complejidad se incrementa a la hora de definir las variables
(y su formato). Las variables ofrecidas para consulta por los agentes SNMP se definen a travs de
una MIB (Management Information Base, Base de Informacin de Gestin). La MIB (hay slo una
aunque existen mltiples extensiones a sta) es una forma de determinar la informacin que ofrece
un dispositivo SNMP y la forma en que se representa. La MIB actual es MIB-II y est definida en el
RFC 1213, aunque hay mltiples extensiones definidas en otros RFCs. La MIB est descrita en
ASN.1 para facilitar su transporte transparente por la capa de red.
Cada agente SNMP ofrece informacin dentro de una MIB, tanto de la general (definida en los
distintos RFCs) como de aquellas extensiones que desee proveer cada uno de los fabricantes. As,
los fabricantes de routers han extendido las MIBs estndar incluyendo informacin especfica de
sus equipos.

Qu se puede hacer con SNMP? Con SNMP se puede monitorizar el estado de un enlace punto a
punto para detectar cuando est congestionado y tomar as medidas oportunas, se puede hacer
que una impresora alerte al administrador cuando se ha quedado sin papel, o que un servidor
enve una alerta cuando la carga de su sistema incrementa significativamente. SNMP tambin
permite la modificacin remota de la configuracin de dispositivos, de forma que se podra
modificar las direcciones IP de un ordenador a travs de su agente SNMP, u obligar a la ejecucin
de comandos (si el agente ofrece las funcionalidades necesarias)

2. SNMP en GNU/Linux
Ahora bien, SNMP es un mundo muy complejo y amplio y el lector posiblemente est interesado
con saber qu puede hacer con SNMP en su servidor GNU/Linux y de qu herramientas dispone
para hacerlo. Pues bien, con GNU/Linux y con herramientas de software libre se pueden hacer,
entre otras cosas, las siguientes:

instalar un agente SNMP para monitorizar variables en un servidor con GNU/Linux.

utilizar en una estacin con GNU/Linux una herramienta de gestin para observar variables
de agentes SNMP.

programar un interfaz para tomar medidas en base a la consulta (monitorizacin de


variables de un elemento SNMP).

programar un interfaz para recibir alertas SNMP y tratarlas como sea necesario.

Existen, tambin, herramientas propietarias para llevar a cabo estas funciones. Algunas de las ms
conocidas, como HP OpenView, SunNet Manager e IBM Netview, soportan muchas de las
funciones que se van a tratar aqu. Sin embargo se va a entrar en detalle en herramientas de
software libre, por considerarse que sern las herramientas ms tiles para un desarrollador que
quiera conocer "por dentro" el funcionamiento de los protocolos.
El estar en posesin del cdigo fuente ayuda en gran medida a la persona que tiene que entrar en
contacto con la tecnologa ya que, rpidamente, puede familiarizarse con sta a travs de una
implementacin, o la puede poner a prueba compilndola e instalndola.

3. Agentes SNMP
En la mayora de los sistemas GNU/Linux, se incluye un agente de SNMP que se trata de uno de
los ms desarrollados en la actualidad. Se trata de la actualizacin de la librera SNMP de la
Universidad de California en Davis (que a su vez se basa en la librera de la Universidad de

Carnegie Mellon). La librera se llamaba, en versiones previas ucd-snmp, ahora se denomina netsnmp. La versin actual ha sido portada a GNU/Linux de la librera original por Juergen
Schoenwaelder y Erik Schoenfelder, el desarrollador principal es Wes Hardaker.
Esta librera ha sido muy actualizada y desarrollada e incluye las herramientas de SNMP
"tradicionales". Las ltimas versiones parten de la base de cdigo de la versin 2.1 y han sido
tremendamente mejoradas.
La versin actual, la 4.1, incluye soporte para todas las versiones de SNMP (desde la uno, a la
tres). Los agentes de SNMP que instala son perfectamente extensibles, tanto a travs del propio
cdigo (con la API proporcionada) como a travs de comandos definidos en la configuracin.
Al tratarse de un software de agentes tan extendido, es conveniente detenerse un poco en su
instalacin y configuracin, as como en las herramientas que proporciona.

3.1 Instalacin de net-smp


El primer paso ser, sin duda, obtener el cdigo fuente de la distribucin. Anteriormente estaba
disponible en [Link] pero ahora se ha movido a sourceforge (para
aprovechar los recursos que ste ofrece para proyectos libres) y est disponible en
[Link]
Una vez descargado y descomprimido en un directorio, se puede proceder a compilar el cdigo
fuente para ello se hace desde la raz:
$ configure
$ make all
y, con suerte, quedar compilado y preparado para instalar. Esta librera no depende de otras, es
autocontenida, lo que facilita su compilacin Lo cual se podr hacer con make install. Ahora queda
poner una configuracin adecuada en el fichero /etc/snmp/[Link]
Las distribuciones actuales, por ejemplo Debian o RedHat, incorporan ya el paquete de ucdsnmp de forma que su instalacin es mucho ms sencilla (son binarios ya compilados) y su
configuracin rpida. Por ejemplo, para el paquete Debian de ucd-snmp, basta con instalarlo para
tener ya un agente ejecutndose de forma transparente al usuario.
De hecho en la distribucin se incluyen dos agentes. El primero snmpd es un agente que
permanece escuchando en el puerto 161 (udp) esperando recibir peticiones, cuando le llega una
solicitud la procesa y devuelve la informacin. El segundo, snmptrapd se trata de un agente que
procesa las alertas de otros agentes. Para ello permanece escuchando en el puerto 162 (udp),

cuando recibe una alerta por este puerto procede a guardarla en el registro (syslog). Sin embargo
tambin puede ser configurado para utilizar programas externos en el tratamiento de las alertas.
Los agentes de Net-snmp incluyen una serie de extensiones para poder obtener informacin
especfica del sistema como son:

informacin general del sistema

conexiones tcp/udp/ip/snmp abiertas y estado

discos duros

procesos y carga del procesador

3.2 Configuracin de los agentes


Una vez instalados los agentes slo ser necesario adaptarlo a las necesidades del equipo en el
que va a estar instalado. La librera incluye una buena documentacin que describe el formato de
los ficheros de configuracin.
En la pgina de manual snmpd_config se describe el funcionamiento general de los ficheros de
configuracin. En la instalacin en sistemas Debian, el agente queda instalado con un fichero de
ejemplo

de

configuracin,

en

otros

caso

ser

necesario

copiar

(o

crear)

uno

en /etc/snmp/[Link]. Pero muchos de los problemas pueden venir por no entender


correctamente el modo de funcionamiento de la autenticacin en SNMP.
Las primeras definiciones en el fichero de configuracin definen las limitaciones para el acceso al
agente desde cualquier servidor. Uno de los problemas ms comunes es no ser capaz de acceder
al agente porque estas restricciones son muy fuertes o no se han definido correctamente. El
funcionamiento es, quizs, un tanto complejo, pero esto se debe a que el agente tiene soporte para
la autenticacin en SNMPv1, en SNMPv2c (con comunidades) y en SNMPv3 (a travs de usuarios
y grupos). Net-snmp implementa el Modelo de Control de Accesos Basados en Vistas
(VACM, View-Access Control Model) definido como RFC.
Lo primero que se debe definir es una relacin entre comunidades y modelos de seguridad en el
agente SNMP, tras esto se define una relacin entre modelos de seguridad y grupos, se definen
vistas (que son zonas del rbol de la MIB) y, finalmente, se indica el acceso permitido de los grupos
a las vistas.
Esto puede parecer complejo, pero quedar ms claro con un ejemplo. Si se tiene definida la
siguiente relacin:

[Link] source community

com2sec readonly default public


com2sec readwrite [Link] private

# [Link] [Link] group


MyROSystem v1 paranoid group
MyROSystem v2c paranoid group
MyROSystem usm paranoid group
MyROGroup v1 readonly group
MyROGroup v2c readonly group
MyROGroup usm readonly group
MyRWGroup v1 readwrite group
MyRWGroup v2c readwrite group
MyRWGroup usm readwrite
Se est incluyendo todos los accesos como comunidad "public" desde cualquier lugar al
grupo MyROGroup, mientras que los accesos como comunidad "private" desde el servidor local se
vinculan al grupoMyRWGroup. Con las siguientes vistas definidas se termina la definicin de los
accesos a los agentes:

# incl/excl subtree mask


view all included .1 80
view system included .[Link]

# context [Link] [Link] match read write notif


access MyROSystem "" any noauth exact all none none
access MyROGroup "" any noauth exact all none none

access MyRWGroup "" any noauth exact all all none


Con esta configuracin garantizamos el acceso de escritura al grupo definido anteriormente
(MyRWGroup) a cualquier parte de la MIB, mientras que slo se permite leer dentro de la
vista system (que est definida como una parte limitada de la MIB disponible) al grupo de slo
lectura.
Sin embargo a travs de la configuracin permite adaptar mucho ms que slo el acceso al agente.
Entre otras cosas se puede:

Hacer que el agente monitorice la existencia de procesos: proc. De esta forma se puede
controlar que, por ejemplo, el proceso apache tenga ms de 100 procesos. Tambin es
posible tomar acciones en caso de que las limitaciones impuestas a los procesos no se
cumplan, definindolas con procfix.

Hacer que el agente ejecute comandos con la funcin exec. El agente ejecutar estos
comandos cuando se consulte la variable de la MIB que se defina. De esta forma se puede
utilizar el agente como una herramienta de gestin que tome acciones dentro del sistema,
ampliando su comportamiento a algo ms all que un mero elemento que monitoriza
variables en el sistema.

Hacer que el agente controle la carga de la mquina para que se mantenga en unos lmites
determinados con el parmetro load.

Definir algunos de los parmetros internos del agente en la MIB, como la ubicacin del
sistema (syslocation) o la persona de contacto (syscontact).

Configurar el agente para enviar alertas a otros agentes cuando se den las condiciones
necesarias. Para ello se tiene que definir la comunidad a utilizar con trapcommunity y el
servidor concreto a utilizar con trapsink, trap2sink, o informsink.

El formato en detalle de la configuracin de los agentes se puede consultar en la pgina de


manual [Link]

3.3 Familiarizndose con el agente


Ya se debera tener el agente configurado y funcionando, hecho que se puede comprobar mirando
el listado de procesos (con, por ejemplo, ps aux |grep snmp) y de conexiones para ver que hay un
proceso escuchando en el puerto 161 (con, netstat -anp -u). Si no se ha lanzado an habr que
lanzarlo ejecutando /usr/sbin/snmpd, la mayora de las distribuciones instalarn un programa para

poder parar y lanzar el demonio de forma sencilla. En el caso de Debian esto se consigue llamando
el script /etc/init.d/snmp con la orden start.
Tras esto, llega el momento de familiarizarse con las herramientas de gestin SNMP incluidas
dentro de net-snmp. Estas son:

snmpstatus que permite acceder a la situacin del agente.

snmpwalk que permite recorrer la MIB del agente y sus variables.

snmpget y snmpset que permiten, respectivamente, consultar y fijar atributos de SNMP.

snmptranslate permite traducir de un identificador de objeto (OID) de la MIB a una cadena


de caracteres representativa de ste.

snmpdelta, establece un proceso de monitorizacin sobre una o ms variables del agente,


de forma que recuperar el valor de estas variables en periodos de tiempo definidos.

snmptest es una herramienta de prueba del agente, al conectarse permite, a travs de un


interfaz de lnea de comandos, recuperar cualquier variable que este contenga. Indica los
mtodos de comunicacin usados contra el agente, por si fuera necesaria su depuracin.

snmpnetstat, es un comando atpico en las distribuciones de SNMP ya que es particular de


la distribucin net-snmp. Nos permite obtener un listado de los canales de comunicacin
abiertos en una mquina, al igual que nestat, pero utilizando un agente SNMP para
recuperar la informacin.

Muchas de estas funciones son comunes de cualquier implementacin de SNMP y el desarrollador


las encontrar en cualquier distribucin.
As, si se desea saber si el agente est activo se hara:
$ snmpstatus -v 1 localhost public
[[Link]]=>[Linux templar2.2.16-storm #1 Thu Aug 24 [Link] PDT 2000 i686] Up: [Link].24
Interfaces: 0, Recv/Trans packets: 1908/1908 | IP: 1906/1906
Para consultar toda una rama se puede utilizar el comando snmpwalk un ejemplo de su uso se
muestra en el listado 1. Para obtener un valor concreto del rbol (por ejemplo, la fecha del sistema)
se ejecutara:
$ snmpget localhost public [Link].0
[Link].0 = 2001-2-12,[Link].0,+1:0

3.4 Otros agentes SNMP para Linux


El agente de net-snmp no es el nico agente disponible para los sistemas GNU/Linux aunque s el
que posiblemente se incluya en ms distribuciones y est ms probado y extendido. Otros agentes
a considerar dentro de GNU/Linux son:

snmpd-tcl (disponible en [Link] Se trata de una extensin ms que


un agente en s, para proveer la MIB de Recursos del Sistema (RFC 1514) dentro de un
agente SNMP. Est pensado para poder multiplexar varios agentes a travs del mismo
puerto, de forma que cada uno ofrezca una MIB determinada.

opennms el proyecto de Gestin Abierta de Redes (Open Network Management,


[Link]) ofrece una librera Java con licencia LGPL denominada JoeSNMP. Esta
librera incluye una arquitectura completa de agentes SNMP desde el agente en s a
agentes para procesar las alarmas y un gestor genrico.

Agent++, que es una implementacin de agentes SNMP en C++ que soporta desde la
versin 1 hasta la 3. Su licencia de distribucin no es, sin embargo, libre (disponible en
[Link]

SNMP++, al igual que el anterior est programado en C++, pero no soporta las mismas
versiones de SNMP (de hecho es la base sobre la que se construy Agent++). Su licencia
de distribucin tampoco es libre, disponible en [Link]

4. Herramientas para monitorizar agentes


Sin embargo un agente no sirve para mucho sin herramientas que lo monitoricen, esto lo dir
cualquier administrador. Dejando de un lado, temporalmente, el punto de vista del desarrollador y
programador podemos pasar a responder la siguiente pregunta: Qu necesita un administrador?
Pues ni ms ni menos que una herramienta visual, desde las que poder consultar las variables de
los agentes, poner monitores para comprobar su evolucin, y ver "grficamente" las alertas.
Nuestro administrador de sistemas no tiene que pensar que no va a encontrar esto aqu, y que esto
de GNU/Linux es slo para los desarrolladores. Se le puede informar de que existen un buen
nmero de herramientas disponibles para los sistemas GNU/Linux con soporte de SNMP (o que
van a tenerlo pronto, segn sus autores). Importante a destacar, y esto har las delicias del
personal de contabilidad, es que estas herramientas no tienen licencias de miles de euros (como

sus equivalentes propietarias) y que no les van tan a la zaga en cuanto a caractersticas y
funcionalidad disponible.
Entre otras herramientas podemos hablar de:

Scotty (tambin conocido como tkined), es una herramienta completa de monitorizacin


incluye capacidades de gestin/monitorizacin de dispositivos SNMP. Est implementada
en Tcl/Tk, con extensiones propias, e incluye hasta un navegador de MIBs. Disponible en
[Link] schoenw/scotty/

Softguard. Se trata de un navegador para agentes SNMP y sus MIBs, incluye funciones de
auto descubrimiento y est tambin implementado en Tcl/Tk aunque est mucho ms
orientado

hacia

SNMP

que

Scotty.

Se

puede

obtener

de

[Link]

NetraMet. Se trata de una herramienta diseada para gestionar el accounting de servidores


(RFC 1272, 2063, 2064 y 2123). Incluye una implementacin para tratar las extensiones de
NetFlow de CISCO. Descargable desde [Link]

Gxsnmp es un gestor de elementos SNMP an en desarrollo pero con un gran potencial.


Las versiones actuales son betas muy recientes que carecen de un gran nmero de
funcionalidades. Sin embargo sus bases son slidas. Utiliza una base de datos para
almacenar la informacin de agentes y redes (tiene interfaces programados a varias, entre
otras, mysql), y la librera SMI para acceder a las MIBs. Es posible que, en un futuro y
cuando sea ms madura, sea la aplicacin por excelencia para gestin de agentes SNMP
en entornos GNU/Linux. Se puede obtener en [Link]

Gkrellm es un monitor que permite monitorizar mltiples caractersticas del sistema, desde
la capacidad del disco al uso de la CPU con un bonito widget en el escritorio. Existe una
extensin a este monitor que permite incorporar variables SNMP para monitorizarlas junto
con el resto de caractersticas del sistema.

mrtg. Herramienta con interfaz WWW que permite una lectura en tiempo real de
estadsticas de distintos elementos, entre otros, dispositivos SNMP. Es una de las
herramientas ms conocidas para monitorizacin de trfico, y una de las ms extendidas.
Consultar [Link]

cheops. Herramienta sustitutiva de scotty para la gestin de elementos de red, an no


incluye soporte de SNMP pero es tremendamente grfica e intuitiva.

mon. Se trata de una herramienta integrada para la gestin de red, soportando mltiples
sistemas en los que, a travs de agentes, se pueden monitorizar las aplicaciones de stos

y su rendimiento. Tiene soporte de SNMP y ofrece la posibilidad de definir muchos niveles


de alertas, desde correo electrnico a notificaciones con voz en tiempo real. Disponible en
[Link]

big brother. Pretende ser una herramienta integrada, con una interfaz orientada a WWW
para monitorizar estadsticas. Su licencia no permite la distribucin comercial, pero aun as
tiene caractersticas interesantes, aunque se ve superada por las anteriores.

5. Desarrollo de agentes
No se puede terminar este artculo sin estudiar la forma de integrar la gestin SNMP con
aplicaciones a travs de la programacin de interfaces de acceso SNMP. De no hacerlo as es
probable que algn programador experimentado se sienta defraudado por no haber llegado hasta
el ltimo detalle.
Pues bien, aunque existan herramientas, como ya se han visto, de gestin de dispositivos, un
desarrollador puede querer generar su propia aplicacin a medida para acceder a valores ofrecidos
por elementos SNMP. De hecho esto puede ser incluso un requisito de un cliente y quizs la
solucin no est disponible entre los elementos que ya hemos destacado.
Actualmente se pueden desarrollar aplicaciones con acceso a SNMP utilizando libreras libres en
tres lenguajes distintos: Perl, Tcl/Tk, PHP, C y Java.
En el caso de Perl existen tres libreras distintas de acceso a SNMP, la librera Net::SNMP
(disponible

en

[Link]),

la

librera

SNMP_session

(disponible

en

[Link] y el mdulo de extensin de Perl para la


librera UCD SNMPv3 (disponible en [Link] Salvo la
ltima, estas libreras no necesitan tener ninguna librera de agentes instalada en el sistema.
Para

Tcl

existe

la

extensin

proporcionada

por

el

interfaz

de

gestin scotty denominada Tnm::snmp (Tnm es la extensin para herramientas de gestin de red)
que permite incorporar funciones de gestin de SNMP tanto dentro de scotty como fuera de ste.
Tambin el lenguaje PHP (versin 3 y versin 4) incorpora extensiones con mdulos SNMP para
poder programar aplicaciones con interfaces WWW con acceso a dispositivos de red.
Para las versiones compiladas (C y Java) se puede utilizar cualquiera de las libreras de desarrollo
mencionadas anteriormente (net-snmp u openmms) ya que cualquiera de ellas ofrece una API
completa para el acceso a las funciones de SNMP.

5.1 Ejemplo de una aplicacin en Perl


Por ltimo se van a ver algunos ejemplos de aplicaciones utilizando la librera Net::SNMP. Se utiliza
sta librera por estar mejor orientada a objetos que las dems libreras en Perl, y por estar bien
documentada. Ntese que la versin de la librera de Perl integrada con la librera de net-snmp
tiene soporte para las ltimas versiones de SNMP (v3). Se ha elegido tambin la primera de stas
por no depender de la implementacin concreta de SNMP en el sistema.
En el listado 2 se puede ver un ejemplo de aplicacin con Perl. Esta aplicacin tan slo recoge una
variable SNMP del agente ejecutndose en el sistema local, dicha variable viene descrita por su
identificador de objeto (los nmeros punteados de la MIB).
Como se puede ver, lo primero que se hace es crear un objeto sesin, entregando los parmetros
necesarios para generar la sesin (servidor al que se va a contactar, comunidad y puerto).
Posteriormente, se llama a la funcin de consulta de variables get_request. Tras la comprobacin
de errores correspondiente se muestra el resultado y se cierra la sesin.
La librera puede operar de dos modos: bloqueante o no-bloqueante. En modo bloqueante las
peticiones se ejecutan por el orden indicado y no se contina el flujo del programa hasta que se
lleva a cabo. En el modo no-bloqueante se puede indicar la funcin encargada de procesar los
datos y continuar la ejecucin del programa. Dado que las peticiones tardan tiempo en ser
recibidas por el agente SNMP y devueltas, puede pensarse en situaciones de comprobaciones de
mltiples agentes (o mltiples variables en mltiples agentes) en las que lo mejor sea enviar todas
las solicitudes a los agentes y procesar las respuestas en paralelo, en lugar de ir una a una. ste
tipo de programacin es la que se puede realizar con el modo bloqueante.
El resto de las funciones que ofrece el objeto sesin son similares variando, quizs, algunos
parmetros. Una funcin tambin interesante es trap que permite enviar alertas a otros agentes
SNMP. Con esta funcin se puede implementar fcilmente, como se muestra en el Listado 3.
Para entrar en detalles en la programacin de accesos a SNMP es necesario, casi obligatorio,
entrar en detalles del funcionamiento y acceso a las MIBs de los agentes. Este tema queda, sin
embargo, fuera del mbito de este artculo.

6. Resumen

Se ha dado una visin general de qu es SNMP y cmo puede ser utilizado ste, tanto desde el
punto de vista de un agente incluido en el sistema operativo para monitorizar sus acciones al
desarrollo de aplicaciones con acceso a SNMP pasando someramente por algunas de las
herramientas de monitorizacin disponibles.

También podría gustarte