• Sonuç bulunamadı

Hakan KUTUCU SNMP

N/A
N/A
Protected

Academic year: 2021

Share "Hakan KUTUCU SNMP"

Copied!
1
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

TERM PROJECT

SNMP

Hakan KUTUCU

İzmir Institute of Tecnology, 2002-05-23

(2)

In this project I have installed UCD-SNMP 5.0 and NET-SNMP 4.2.5 in a linux machine from the following website http://net-snmp.sourceforge.net/download

I have used the following Makefile to compile codes.

# Warning: you may need more libraries than are included here on the

# build line. The agent frequently needs various libraries in order

# to compile pieces of it, but is OS dependent and we can't list all

# the combinations here. Instead, look at the libraries that were

# used when linking the snmpd master agent and copy those to this file CC=gcc

CFLAGS=-I/usr/local/include -g OBJS1=termproject.o

OBJS2=ustMain.o ustScalarSet.o OBJS3=asyncapp.o

TARGETS=ustMain termproject asyncapp

# if ucd-snmp was compiled with openssl support CRYPTO=-L/usr/local/ssl/lib -lcrypto

# for Solaris

#SYSLIBS=-lsocket -lnsl -lkstat

# for BSD

#SYSLIBS=-lkvm

# for Linux and many other OSes

#SYSLIBS=-ldl

# shared library flags (assumes gcc) DLFLAGS=-fPIC -shared

all: $(TARGETS)

termproject: $(OBJS1)

$(CC) -o termproject $(OBJS1) -L/usr/local/lib -lsnmp $(SYSLIBS) $ (CRYPTO)

asyncapp: $(OBJS3)

$(CC) -o asyncapp $(OBJS3) -L/usr/local/lib -lsnmp $(SYSLIBS) $ (CRYPTO)

ustMain: $(OBJS2)

$(CC) -o ustMain $(OBJS2) -L/usr/local/lib -lucdagent -lucdmibs -lsnmp $(SYSLIBS) $(CRYPTO)

clean:

rm $(OBJS2) $(OBJS2) $(TARGETS)

(3)

standard(0)

sample(11) experimantal(3)

internet(1)

registration authority(1) member body(2) identified organization(3)

ccit(0) iso(1) joint-iso-ccit(2)

dod(6)

security(5) snmpv2(6) private(4)

mib-2(1) directory(1)

interface(2)

system(1) ip(4) icmp(5) tcp(6) udp(7) egp(8) transmission(10)

sysDescr(1) sysObjectID sysUpTime(3) sysContact(4) sysName(5) sysLocation(6) sysServices(7) mgmt(2)

$(CC) $(CFLAGS) $(DLFLAGS) -c -o ustScalarSet.o ustScalarSet.c

$(CC) $(CFLAGS) $(DLFLAGS) -o ustScalarSet.so ustScalarSet.o

STANDARD MIB TREE

(4)

OBJECTS UNDER SYSTEM

To get this information I used the command snmptranslate -Td .1.3.6.1.2.1.1.1 in the command line.

OID value: 1.3.6.1.2.1.1.1

OID description:

sysDescr OBJECT-TYPE

SYNTAX DisplayString (SIZE (0..255)) ACCESS read-only

STATUS mandatory DESCRIPTION

"A textual description of the entity. This value should include the full name and version identification of the system's hardware type, software operating-system, and networking software. It is mandatory that this only contain printable ASCII characters."

::= { system 1 }

OID value: 1.3.6.1.2.1.1.2

OID description:

sysObjectID OBJECT-TYPE

SYNTAX OBJECT IDENTIFIER ACCESS read-only

STATUS mandatory DESCRIPTION

"The vendor's authoritative identification of the network management subsystem contained in the

(5)

entity. This value is allocated within the SMI enterprises subtree (1.3.6.1.4.1) and provides an easy and unambiguous means for determining `what kind of box' is being managed. For example, if vendor `Flintstones, Inc.' was assigned the subtree 1.3.6.1.4.1.4242, it could assign the identifier 1.3.6.1.4.1.4242.1.1 to its `Fred Router'."

::= { system 2 }

OID value: 1.3.6.1.2.1.1.3

OID description:

sysUpTime OBJECT-TYPE SYNTAX TimeTicks ACCESS read-only STATUS mandatory DESCRIPTION

"The time (in hundredths of a second) since the network management portion of the system was last re-initialized."

::= { system 3 }

OID value: 1.3.6.1.2.1.1.4

OID description:

sysContact OBJECT-TYPE

SYNTAX DisplayString (SIZE (0..255)) ACCESS read-write

STATUS mandatory

(6)

DESCRIPTION

"The textual identification of the contact person for this managed node, together with information on how to contact this person."

::= { system 4 }

OID value: 1.3.6.1.2.1.1.5

OID description:

sysName OBJECT-TYPE

SYNTAX DisplayString (SIZE (0..255)) ACCESS read-write

STATUS mandatory DESCRIPTION

"An administratively-assigned name for this managed node. By convention, this is the node's fully-qualified domain name."

::= { system 5 }

OID value: 1.3.6.1.2.1.1.6

OID description:

sysLocation OBJECT-TYPE

SYNTAX DisplayString (SIZE (0..255)) ACCESS read-write

STATUS mandatory DESCRIPTION

"The physical location of this node (e.g., `telephone closet, 3rd floor')."

::= { system 6 }

(7)

OID value: 1.3.6.1.2.1.1.7

OID description:

sysServices OBJECT-TYPE

SYNTAX INTEGER (0..127) ACCESS read-only

STATUS mandatory DESCRIPTION

"A value which indicates the set of services that this entity primarily offers.

The value is a sum. This sum initially takes the value zero, Then, for each layer, L, in the range 1 through 7, that this node performs transactions for, 2 raised to (L - 1) is added to the sum. For example, a node which performs primarily routing functions would have a value of 4 (2^(3-1)). In contrast, a node which is a host offering

application services would have a value of 72 (2^(4-1) + 2^(7-1)). Note that in the context of the Internet suite of protocols, values should be calculated accordingly:

layer functionality

1 physical (e.g., repeaters)

2 datalink/subnetwork (e.g., bridges) 3 internet (e.g., IP gateways)

4 end-to-end (e.g., IP hosts) 7 applications (e.g., mail relays)

For systems including OSI protocols, layers 5 and

(8)

6 may also be counted."

::= { system 7 }

THE CODE OF THE PROGRAM WHICH GETTING GENERAL INFORMATIONS ABOUT THE SWITCH

#include <ucd-snmp/ucd-snmp-config.h>

#include <ucd-snmp/ucd-snmp-includes.h>

#include <ucd-snmp/system.h>

#include <string.h>

char *mib[7]={"system.sysDescr.0","system.sysObjectID.0",

"system.sysUpTime.0","system.sysContact.0","system.sysName.0", "system.sysLocation.0","system.sysServices.0"};

int main(int argc, char ** argv) {

struct snmp_session session, *ss;

struct snmp_pdu *pdu[10];

struct snmp_pdu *response[10];

oid anOID[MAX_OID_LEN];

size_t anOID_len = MAX_OID_LEN;

struct variable_list *vars;

int status,i=0;

int count=1;

/*

* Initialize the SNMP library

(9)

*/

init_snmp("snmpapp");

/*

* Initialize a "session" that defines who we're going to talk to */

snmp_sess_init( &session ); /* set up defaults */

session.peername = "193.140.248.3";

/* set the SNMP version number */

session.version = SNMP_VERSION_1;

/* set the SNMPv1 community name used for authentication */

session.community = "public";

session.community_len = strlen(session.community);

/*

* Open the session */

SOCK_STARTUP;

ss = snmp_open(&session); /* establish the session

*/

if (!ss) {

snmp_perror("ack");

snmp_log(LOG_ERR, "something horrible happened!!!\n");

exit(2);

} /*

* Create the PDU for the data for our request.

* 1) We're going to GET the nodes which we have defined in mib[] variable.

(10)

*/

while(i<7) {

pdu[i] = snmp_pdu_create(SNMP_MSG_GET);

read_objid(mib[i], anOID, &anOID_len);

snmp_add_null_var(pdu[i], anOID, anOID_len);

/*

* Send the Request out.

*/

status = snmp_synch_response(ss, pdu[i], &response[i]);

/*

* Process the response.

*/

if (status == STAT_SUCCESS && response[i]->errstat ==

SNMP_ERR_NOERROR) { /*

* SUCCESS: Print the result variables */

for(vars = response[i]->variables; vars; vars = vars->next_variable) print_variable(vars->name, vars->name_length, vars);

/* manipuate the information ourselves */

for(vars = response[i]->variables; vars; vars = vars->next_variable) {

if (vars->type == ASN_OCTET_STR) {

char *sp = (char *)malloc(1 + vars->val_len);

memcpy(sp, vars->val.string, vars->val_len);

sp[vars->val_len] = '\0';

printf("value #%d is a string: %s\n", count++, sp);

free(sp);

}

(11)

else

printf("value #%d is NOT a string! Ack!\n", count++);

} } else { /*

* FAILURE: print what went wrong!

*/

if (status == STAT_SUCCESS)

fprintf(stderr, "Error in packet\nReason: %s\n", snmp_errstring(response[i]->errstat));

else

snmp_sess_perror("snmpget", ss);

} /*

* Clean up:

* 1) free the response.

*/

if (response[i])

snmp_free_pdu(response[i]);

i++;

} /* while*/

/ * 2) close the session. */

snmp_close(ss);

SOCK_CLEANUP;

return (0);

} /* main() */

(12)

OUTPUT OF THE CODE

kutucu@galois:~$ ./termproject

system.sysDescr.0 = 3Com SuperStack II value #1 is a string: 3Com SuperStack II

system.sysObjectID.0 = OID: enterprises.43.10.27.4.1.2.2 value #2 is NOT a string! Ack!

system.sysUpTime.0 = Timeticks: (813922) 2:15:39.22 value #3 is NOT a string! Ack!

system.sysContact.0 = value #4 is a string:

system.sysName.0 = Switch 3300 value #5 is a string: Switch 3300 system.sysLocation.0 = Network LAB value #6 is a string: Network LAB system.sysServices.0 = 2

value #7 is NOT a string! Ack!

2. QUESTION: The information about ports is available in ifTable MIB structure.

To get this information I used the command snmptranslate -Tp interfaces.ifTable +-ifTable(2)

|

+-ifEntry(1) | Index: ifIndex |

+- -R-- Integer32 ifIndex(1)

| Textual Convention: InterfaceIndex | Range: 1..2147483647

+- -R-- String ifDescr(2)

| Textual Convention: DisplayString | Size: 0..255

+- -R-- EnumVal ifType(3)

| Textual Convention: IANAifType

| Values: other(1), regular1822(2), hdh1822(3), ddnX25(4), rfc877x25(5),

ethernetCsmacd(6), iso88023Csmacd(7), iso88024TokenBus(8), iso88025TokenRing(9),

(13)

iso88026Man(10), starLan(11), proteon10Mbit(12), proteon80Mbit(13),

hyperchannel(14), fddi(15), lapb(16), sdlc(17), ds1(18), e1(19), basicISDN(20),

primaryISDN(21), propPointToPointSerial(22), ppp(23), softwareLoopback(24), eon(25), ethernet3Mbit(26), nsip(27), slip(28), ultra(29), ds3(30), sip(31), frameRelay(32),

rs232(33), para(34), arcnet(35), arcnetPlus(36), atm(37), miox25(38), sonet(39), x25ple(40), iso88022llc(41), localTalk(42), smdsDxi(43), frameRelayService(44), v35(45), hssi(46), hippi(47), modem(48), aal5(49), sonetPath(50), sonetVT(51), smdsIcip(52), propVirtual(53), propMultiplexor(54), ieee80212(55), fibreChannel(56), hippiInterface(57), frameRelayInterconnect(58), aflane8023(59), aflane8025(60), cctEmul(61), fastEther(62), isdn(63), v11(64), v36(65), g703at64k(66), g703at2mb(67), qllc(68), fastEtherFX(69), channel(70), ieee80211(71), ibm370parChan(72), escon(73), dlsw(74), isdns(75), isdnu(76), lapd(77), ipSwitch(78), rsrb(79), atmLogical(80), ds0(81), ds0Bundle(82), bsc(83), async(84), cnr(85), iso88025Dtr(86), eplrs(87), arap(88),

propCnls(89), hostPad(90), termPad(91), frameRelayMPI(92), x213(93), adsl(94), radsl(95), sdsl(96), vdsl(97), iso88025CRFPInt(98), myrinet(99), voiceEM(100), voiceFXO(101), voiceFXS(102), voiceEncap(103), voiceOverIp(104), atmDxi(105), atmFuni(106), atmIma(107), pppMultilinkBundle(108), ipOverCdlc(109),

ipOverClaw(110), stackToStack(111), virtualIpAddress(112), mpc(113),

ipOverAtm(114), iso88025Fiber(115), tdlc(116), gigabitEthernet(117), hdlc(118), lapf(119), v37(120), x25mlp(121), x25huntGroup(122), trasnpHdlc(123),

interleave(124), fast(125), ip(126), docsCableMaclayer(127),

docsCableDownstream(128), docsCableUpstream(129), a12MppSwitch(130),

tunnel(131), coffee(132), ces(133), atmSubInterface(134), l2vlan(135), l3ipvlan(136), l3ipxvlan(137), digitalPowerline(138), mediaMailOverIp(139), dtm(140), dcn(141), ipForward(142), msdsl(143), ieee1394(144), if-gsn(145), dvbRccMacLayer(146), dvbRccDownstream(147), dvbRccUpstream(148), atmVirtual(149), mplsTunnel(150), srp(151), voiceOverAtm(152), voiceOverFrameRelay(153), idsl(154),

compositeLink(155), ss7SigLink(156), propWirelessP2P(157), frForward(158), rfc1483(159), usb(160), ieee8023adLag(161), bgppolicyaccounting(162), frf16MfrBundle(163), h323Gatekeeper(164), h323Proxy(165), mpls(166),

mfSigLink(167), hdsl2(168), shdsl(169), ds1FDL(170), pos(171), dvbAsiIn(172), dvbAsiOut(173), plc(174), nfas(175), tr008(176), gr303RDT(177), gr303IDT(178), isup(179), propDocsWirelessMaclayer(180), propDocsWirelessDownstream(181), propDocsWirelessUpstream(182), hiperlan2(183), propBWAp2Mp(184),

sonetOverheadChannel(185), digitalWrapperOverheadChannel(186), aal2(187),

radioMAC(188), atmRadio(189), imt(190), mvl(191), reachDSL(192), frDlciEndPt(193), atmVciEndPt(194), opticalChannel(195), opticalTransport(196), propAtm(197),

voiceOverCable(198), infiniband(199), teLink(200), q2931(201), virtualTg(202), sipTg(203), sipSig(204), docsCableUpstreamChannel(205), econet(206), pon155(207), pon622(208), bridge(209), linegroup(210), voiceEMFGD(211), voiceFGDEANA(212), voiceDID(213)

+- -R-- Integer32 ifMtu(4) +- -R-- Gauge ifSpeed(5) +- -R-- String ifPhysAddress(6) | Textual Convention: PhysAddress +- -RW- EnumVal ifAdminStatus(7)

(14)

| Values: up(1), down(2), testing(3) +- -R-- EnumVal ifOperStatus(8)

| Values: up(1), down(2), testing(3), unknown(4), dormant(5), notPresent(6), lowerLayerDown(7)

+- -R-- TimeTicks ifLastChange(9) +- -R-- Counter ifInOctets(10) +- -R-- Counter ifInUcastPkts(11) +- -R-- Counter ifInNUcastPkts(12) +- -R-- Counter ifInDiscards(13) +- -R-- Counter ifInErrors(14)

+- -R-- Counter ifInUnknownProtos(15) +- -R-- Counter ifOutOctets(16)

+- -R-- Counter ifOutUcastPkts(17) +- -R-- Counter ifOutNUcastPkts(18) +- -R-- Counter ifOutDiscards(19) +- -R-- Counter ifOutErrors(20) +- -R-- Gauge ifOutQLen(21) +- -R-- ObjID ifSpecific(22)

THE CODE OF THE PROGRAM WHICH GETTING INFORMATIONS ABOUT PORTS OF THE SWITCH

#include <ucd-snmp/ucd-snmp-config.h>

#include <ucd-snmp/ucd-snmp-includes.h>

#include <ucd-snmp/system.h>

#include <string.h>

char *mib[12]={"interfaces.ifTable.ifEntry.ifDescr.100", "interfaces.ifTable.ifEntry.ifDescr.101", "interfaces.ifTable.ifEntry.ifDescr.102", "interfaces.ifTable.ifEntry.ifDescr.103", "interfaces.ifTable.ifEntry.ifDescr.104", "interfaces.ifTable.ifEntry.ifDescr.105", "interfaces.ifTable.ifEntry.ifDescr.106", "interfaces.ifTable.ifEntry.ifDescr.107", "interfaces.ifTable.ifEntry.ifDescr.108",

(15)

"interfaces.ifTable.ifEntry.ifDescr.109", "interfaces.ifTable.ifEntry.ifDescr.110", "interfaces.ifTable.ifEntry.ifDescr.111",}, *mib1[12]={"interfaces.ifTable.ifEntry.ifSpeed.100", "interfaces.ifTable.ifEntry.ifSpeed.101", "interfaces.ifTable.ifEntry.ifSpeed.102", "interfaces.ifTable.ifEntry.ifSpeed.103", "interfaces.ifTable.ifEntry.ifSpeed.104", "interfaces.ifTable.ifEntry.ifSpeed.105", "interfaces.ifTable.ifEntry.ifSpeed.106", "interfaces.ifTable.ifEntry.ifSpeed.107", "interfaces.ifTable.ifEntry.ifSpeed.108", "interfaces.ifTable.ifEntry.ifSpeed.109", "interfaces.ifTable.ifEntry.ifSpeed.110", "interfaces.ifTable.ifEntry.ifSpeed.111",};

int main(int argc, char ** argv) {

struct snmp_session session, *ss;

struct snmp_pdu *pdu[12],*pdu1[12];

struct snmp_pdu *response[12];

oid anOID[MAX_OID_LEN];

size_t anOID_len = MAX_OID_LEN;

struct variable_list *vars;

int status,i=0;

int count=1;

/*

* Initialize the SNMP library */

init_snmp("snmpapp");

(16)

/*

* Initialize a "session" that defines who we're going to talk to */

snmp_sess_init( &session ); /* set up defaults */

session.peername = "193.140.248.3";

/* set the SNMP version number */

session.version = SNMP_VERSION_1;

/* set the SNMPv1 community name used for authentication */

session.community = "public";

session.community_len = strlen(session.community);

/*

* Open the session */

SOCK_STARTUP;

ss = snmp_open(&session); /* establish the session

*/

if (!ss) {

snmp_perror("ack");

snmp_log(LOG_ERR, "something horrible happened!!!\n");

exit(2);

} /*

* Create the PDU for the data for our request.

* 1) We're going to GET the nodes which we have defined in mib[] variable.

*/

while(i<12) {

pdu[i] = snmp_pdu_create(SNMP_MSG_GETNEXT);

read_objid(mib[i], anOID, &anOID_len);

snmp_add_null_var(pdu[i], anOID, anOID_len);

(17)

/*

* Send the Request out.

*/

status = snmp_synch_response(ss, pdu[i], &response[i]);

/*

* Process the response.

*/

if (status == STAT_SUCCESS && response[i]->errstat == SNMP_ERR_NOERROR) {

/*

* SUCCESS: Print the result variables */

for(vars = response[i]->variables; vars; vars = vars->next_variable) print_variable(vars->name, vars->name_length,vars);

} else { /*

* FAILURE: print what went wrong!

*/

if (status == STAT_SUCCESS)

fprintf(stderr, "Error in packet\nReason: %s\n", snmp_errstring(response[i]->errstat));

else

snmp_sess_perror("snmpget", ss);

} /*

* Clean up:

* 1) free the response.

* 2) close the session.

*/

(18)

if (response[i])

snmp_free_pdu(response[i]);

i++;

} /* while*/

i=0;

while(i<12) {

pdu1[i] = snmp_pdu_create(SNMP_MSG_GETNEXT);

read_objid(mib1[i], anOID, &anOID_len);

snmp_add_null_var(pdu1[i], anOID, anOID_len);

/*

* Send the Request out.

*/

status = snmp_synch_response(ss, pdu1[i], &response[i]);

/*

* Process the response.

*/

if (status == STAT_SUCCESS && response[i]->errstat == SNMP_ERR_NOERROR) {

/*

* SUCCESS: Print the result variables */

for(vars = response[i]->variables; vars; vars = vars->next_variable) print_variable(vars->name, vars->name_length,vars);

} else { /*

* FAILURE: print what went wrong!

(19)

*/

if (status == STAT_SUCCESS)

fprintf(stderr, "Error in packet\nReason: %s\n", snmp_errstring(response[i]->errstat));

else

snmp_sess_perror("snmpget", ss);

} /*

* Clean up:

* 1) free the response.

* 2) close the session.

*/

if (response[i])

snmp_free_pdu(response[i]);

i++;

}

snmp_close(ss);

SOCK_CLEANUP;

return (0);

} /* main() */

OUTPUT OF THE PROGRAM

interfaces.ifTable.ifEntry.ifDescr.101 = RMON:10/100 Port 1 on Unit 1 interfaces.ifTable.ifEntry.ifDescr.102 = RMON:10/100 Port 2 on Unit 1 interfaces.ifTable.ifEntry.ifDescr.103 = RMON:10/100 Port 3 on Unit 1 interfaces.ifTable.ifEntry.ifDescr.104 = RMON:10/100 Port 4 on Unit 1 interfaces.ifTable.ifEntry.ifDescr.105 = RMON:10/100 Port 5 on Unit 1 interfaces.ifTable.ifEntry.ifDescr.106 = RMON:10/100 Port 6 on Unit 1 interfaces.ifTable.ifEntry.ifDescr.107 = RMON:10/100 Port 7 on Unit 1 interfaces.ifTable.ifEntry.ifDescr.108 = RMON:10/100 Port 8 on Unit 1

(20)

interfaces.ifTable.ifEntry.ifDescr.109 = RMON:10/100 Port 9 on Unit 1 interfaces.ifTable.ifEntry.ifDescr.110 = RMON:10/100 Port 10 on Unit 1 interfaces.ifTable.ifEntry.ifDescr.111 = RMON:10/100 Port 11 on Unit 1 interfaces.ifTable.ifEntry.ifDescr.112 = RMON:10/100 Port 12 on Unit 1 interfaces.ifTable.ifEntry.ifSpeed.101 = Gauge32: 100000000

interfaces.ifTable.ifEntry.ifSpeed.102 = Gauge32: 100000000 interfaces.ifTable.ifEntry.ifSpeed.103 = Gauge32: 100000000 interfaces.ifTable.ifEntry.ifSpeed.104 = Gauge32: 100000000 interfaces.ifTable.ifEntry.ifSpeed.105 = Gauge32: 10000000 interfaces.ifTable.ifEntry.ifSpeed.106 = Gauge32: 10000000 interfaces.ifTable.ifEntry.ifSpeed.107 = Gauge32: 100000000 interfaces.ifTable.ifEntry.ifSpeed.108 = Gauge32: 100000000 interfaces.ifTable.ifEntry.ifSpeed.109 = Gauge32: 100000000 interfaces.ifTable.ifEntry.ifSpeed.110 = Gauge32: 100000000 interfaces.ifTable.ifEntry.ifSpeed.111 = Gauge32: 100000000 interfaces.ifTable.ifEntry.ifSpeed.112 = Gauge32: 100000000

Referanslar

Benzer Belgeler

TEHLİKE Elektrik çarpması Ölüm veya ciddi yaralanma - Fişsiz pompaları tüm kutuplarında. minimum 3 mm kontak aralığı bulunan harici bir ana şalterle sabit kablolara

Öğretim 2010117025 nolu öğrencisi Fatih BAŞAR’ın, 2012-2013 Eğitim-Öğretim Yılı Yaz Öğretimi kapsamında Akdeniz Üniversitesinden almış olduğu derslerin

sözcüklerinden oluşmaktadır. 1766 yılında Henry Cavendish tarafından keşfedilen hidrojen, Lavoisier tarafından isimlendirilmiştir. Hidrojenin zaman içinde yanabilme

Sayfa üzerindeki seçili veya seçim dışı tüm kilitli nesnelerin üzerindeki kilidi açmak için kullanılan komuttur.

Sardes Lidya KraIIi min bakentidir.LYdia Krali zenginIiiyle ürI Kroisosdur.cOk zengin için&#34;KroisOS kadar zengin&#34;denhr.Sardesir kaynamnln kentten gecen Paktalos

D) En kısa kenarının uzunluğu 7 cm, iki iç açısının ölçü- sü 40° ve 80° olan

Aynı yazılan ve eş anlamlı olan ancak değişik okuna (telaffuz edilen) sözcükleri belirtmek,d. Belirli bir kavramı belirtirken özel bir terimden daha genel bir

2009-2010 yılları arası Avrupa Birliği başarı bursuyla Bologna Üniversitesi, Felsefe ve İletişim Bölümü’nde konuk araştırmacı olarak bulunmuş olup, 2004 yılında