Računarske mreže. Čas 7. Ivana Tanasijević Matematički fakultet, Beograd

Similar documents
Computer Network Programming

UNIX System Programming Lecture 19: IP Sockets

CSE 333 SECTION 7. Client-Side Network Programming

CSE 333 Section 3. Thursday 12 April Thursday, April 12, 12

CSE 333 Section 8 - Client-Side Networking

CSE 333 SECTION 6. Networking and sockets

Outline. Option Types. Socket Options SWE 545. Socket Options. Out-of-Band Data. Advanced Socket. Many socket options are Boolean flags

CSE 333 SECTION 8. Sockets, Network Programming

CSE 333 SECTION 7. Client-Side Network Programming

The Berkeley Sockets API. Networked Systems Architecture 3 Lecture 4

CSE 333 SECTION 7. C++ Virtual Functions and Client-Side Network Programming

Network Programming in C: The Berkeley Sockets API. Networked Systems 3 Laboratory Sessions

Network Programming in C. Networked Systems 3 Laboratory Sessions and Problem Sets

Introduction to Socket Programming

ECE 435 Network Engineering Lecture 2

Azblink API for Sending XMPP Messages via HTTP POST

Category: Informational J. Bound J. McCann Hewlett-Packard W. Stevens February 2003

Application Programming Interfaces

last time redo logging copy-on-write filesystems / snapshots distributed systems motivation, etc.

ECE 435 Network Engineering Lecture 2

UNIX Sockets. Developed for the Azera Group By: Joseph D. Fournier B.Sc.E.E., M.Sc.E.E.

Porting IPv4 applications to IPv4/v6 dual stack. Owen DeLong

5. System Calls or Bust

Redesde Computadores(RCOMP)

CSCI 4061: Sockets and Network Programming

Programiranje Programski jezik C. Sadržaj. Datoteke. prof.dr.sc. Ivo Ipšić 2009/2010

IP Addresses, DNS. CSE 333 Spring Instructor: Justin Hsia

Introduction to Lab 2 and Socket Programming. -Vengatanathan Krishnamoorthi

Internet Engineering Task Force (IETF) July 2011

Network Programming: Part I

Client-side Networking

Sockets and Parallel Computing. CS439: Principles of Computer Systems April 11, 2018

IP Addresses, DNS. CSE 333 Summer Teaching Assistants: Renshu Gu William Kim Soumya Vasisht

Carnegie Mellon. Bryant and O Hallaron, Computer Systems: A Programmer s Perspective, Third Edition

Network Programming November 3, 2008

CS 43: Computer Networks. 05: Socket Programming September 12-14, 2018

Uputstvo za korišćenje logrotate funkcije

Client-server model The course that gives CMU its Zip! Network programming Nov 27, Using ports to identify services.

IPv6 Porting Applications

Socket Programming. #In the name of Allah. Computer Engineering Department Sharif University of Technology CE443- Computer Networks

2007 Microsoft Corporation. All rights reserved.

How do we Communicate? Introduction to Unix Network Programming. What does Alice do? What does Bob do? Two simplest networking programs

Network Programming Worksheet 2. Simple TCP Clients and Servers on *nix with C.

Računarske mreže. Čas 8. Ivana Tanasijević Matematički fakultet, Beograd

Introduction to Computer Networks

SOCKETS. COMP750 Distributed Systems

b) program deljiv3; uses wincrt; var i:integer; begin i:=3; while i<100 do begin write(i:5); i:=i+3; end; end.

Introduction to Network Programming using C/C++

목포해양대해양컴퓨터공학과. IPv6 적용

pojedinačnom elementu niza se pristupa imeniza[indeks] indeks od 0 do n-1

NETWORK PROGRAMMING. Instructor: Junaid Tariq, Lecturer, Department of Computer Science

#include <dirent.h> int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen); DIR *opendir(const char *name);

// print product names in alphabetical order with total // number sold of each product using format name: total void PrintTotals();

Programiranje III razred

The exam is closed book, closed notes, closed electronics, closed telepathy, open mind.

CptS 360 (System Programming) Unit 17: Network IPC (Sockets)

use Socket qw(pf_inet SOCK_STREAM pack_sockaddr_in inet_aton);

UNIVERZITET U BEOGRADU ELEKTROTEHNIČKI FAKULTET

Sockets. Dong-kun Shin Embedded Software Laboratory Sungkyunkwan University Embedded Software Lab.

Hyo-bong Son Computer Systems Laboratory Sungkyunkwan University

IPv6 Network Programming

CSE 124 Discussion Section Sockets Programming 10/10/17

Uvod u programiranje - vežbe. Kontrola toka izvršavanja programa

Računarske osnove Interneta (SI3ROI, IR4ROI)

CS4514 (C04) HELP Session 1 Introduction to Network Programming (v1.3)

Internet protocol stack. Internetworking II: Network programming. April 20, UDP vs TCP. Berkeley Sockets Interface.

for i:=2 to n do if glasovi[i]>max then begin max:=glasovi[i]; k:=i {*promenljiva k ce cuvati indeks takmicara sa najvise glasova *} end;

Internetworking II: Network programming. April 20, 2000

namespace spojneice { public partial class Form1 : Form { public Form1() { InitializeComponent(); }

Piotr Mielecki Ph. D.

Uputstvo za podešavanje mail klijenta

Networks class. CS144 Introduction to Computer Networking. Administrivia. Administrivia 2. Grading. Labs. Goal: Teach the concepts underlying networks

CSE 333 Lecture 16 - network programming intro

Network Socket Programming - 2 BUPT/QMUL

Lab 0. Yvan Petillot. Networks - Lab 0 1

CS321: Computer Networks Socket Programming

Network Socket Programming - 3 BUPT/QMUL

Sockets. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Ken French HELP Session 1 CS4514

CS118 Discussion 1B, Week 1. Taqi Raza BUNCHE 1209B, Fridays 12:00pm to 1:50pm

Write your answer on the next page. You may remove this page for reference while working if you wish.

UNIX Sockets. COS 461 Precept 1

VDSL modem Zyxel VMG1312-B10A/B30A

Lecture 24. Thursday, November 19 CS 375 UNIX System Programming - Lecture 24 1

PREDMET. Osnove Java Programiranja. Čas JAVADOC

Uvod u relacione baze podataka

Veliki računski zadaci mogu se razbiti u manje delove i time se omogućava ljudima da iskoriste ono što su neki drugi već uradili, umesto da počinju

Server-side Programming

Network Socket Programming - 3 BUPT/QMUL

Reliability is an issue. You cannot afford to have any of the data lost or re-ordered.

UNIX Network Programming. Overview of Socket API Network Programming Basics

Azaire Networks J. Laganier DoCoMo Euro-Labs September 2007

PA #2 Reviews. set_name, get_name, del_name. Questions? Will be modified after PA #4 ~

Osnove programskog jezika C# Čas 5. Delegati, događaji i interfejsi

CSC209H Lecture 9. Dan Zingaro. March 11, 2015

Hybrid of client-server and P2P. Pure P2P Architecture. App-layer Protocols. Communicating Processes. Transport Service Requirements

CS321: Computer Networks Introduction to Application Layer

Uputa: Zabranjeno je koristiti bilo kakva pomagala. Rje²enja pi²ete desno od zadatka. Predajete samo ovaj list.

Winsock Server adding Multiple clients support C++

Tutorial on Socket Programming

Transcription:

Računarske mreže Čas 7 Ivana Tanasijević e-mail: ivana@matf.bg.ac.rs Matematički fakultet, Beograd 1

Konvertovanje imena adresa i servisa

Kako se pronalazi ime ili vrednost IP adrese ili servisa Konverzija između numeričkih IP adresa, koje smo do sada koristili, i imena se radi funkcijama gethostbyaddr i gethostbyname. Konverzija između i broja porta i imena servisa se radi pomoću funkcija getservbyport i getservbyname. Kada pozovemo funkcije za konverziju IP adresa, pretražuje se fajl /etc/hosts. Zatim, pomoću UDP se šalje pitanje lokalnim serverima (DNS) navedenim u fajlu /etc/resolv.conf. Ako ni oni nemaju informacije o traženom imenu, pitanje se šalje dalje preko interneta, takođe pomoću UDP. Imena portova se mogu dobiti samo sa lokalnog hosta i to iz fajla /etc/services.

Funkcija gethostbyname Na osnovu jedinog argumenta, imena hosta, vraća strukturu hostent popunjenu informacijama o hostu. Struktura hostent ima sledeće članove: - char *h_name, char **h_aliases, int h_addrtype, int h_length, char **h_addr_list. Ne postavlja errno vrednost, već globalnu promenljivu h_errno. Stoga, za dobijanje opisa greške treba da se koristi funkcija hstrerror umesto strerror. Ostale tri funkcije su slične, pogledati man stranice. Primer: hostserviceinfo

Primer: Pronalaženje imena i broja servisa /* Pokusava se sa dobijanjem broja porta ako je dat naziv servisa. */ if ((serv = getservbyname (argv[1], type))!= NULL) printf ("getservbyname(%s, %s) = %d\n", argv[1], type, ntohs (serv->s_port)); /* Pokusava se sa dobijanjem imena servisa ako je dat broj fajla. * Za tu svrhu se pretrazuje fajl /etc/services. */ else if ((serv = getservbyport (htons (atoi (argv[1])), type))!= NULL) printf ("getservbyport(%s, %s) = %s\n", argv[1], type, serv->s_name); else printf ("File /etc/services does not have information about port/service %s\n", argv[1]);

Nezavisnost od protokola

Skrivanje zavisnosti od protokola Popunjavanje adresne strukture koje je praktikovano do sada zavisi od protokola. Bilo je potrebno da znamo u koji član adresne strukture treba da upisemo rezultat (na primer, sin_addr za IPv4 ili sin6_addr za IPv6). Funkcija getaddrinfo skriva sve zavisnosti od protokola. U aplikaciji se na dalje radi samo sa adresnom strukturom addrinfo koju popunjava ova funkcija, ne vodeći računa o protokolu. Funkcija ima 4 argumenta: ime hosta, servis, strukturu sa specifičnim osobinama koje adresa ipak treba da ima, pokazivač na listu struktura koje je popunila na osnovu prva tri argumenta.

Funkcija getaddrinfo Neki od članova adresne strukture addrinfo su: int ai_flags, int ai_family, int ai_socktype, size_t ai_addrlen, struct sockaddr *ai_addr, struct addrinfo *ai_next. Vrednosti koje korisnik može da postavi preko strukture hints su na primer: ai_flags (AI_PASSIVE, AI_CANONNAME), ai_family (AF_xyz), ai_socktype (SOCK_xyz), ai_protocol. Ako se funkcija uspešno vrati (povratna vrednost je 0), poslednji argument je pokazivač na povezanu listu struktura koje odgovaraju datom zahtevu.

Funkcija getaddrinfo Strukture u ovim listama su već u obliku koje je potreban za pozive funkcija socket, connect, sendto, bind. Argumenti za socket funkciju su ai_family, ai_socktype, ai_protocol. Drugi i treći argument funkcija connect i bind su ai_addr i ai_addrlen. Ova funkcija vrši svu potrebnu dinamičku alokaciju memorije, tako da je potrebno da tu memoriju oslobodimo kada nam više ne treba, funkcijom freeaddrinfo. Ako nam neki podaci trebaju i kasnije, onda je potrebno iskopirati ih, pa tek dealocirati memoriju. Za dobijanje opisa greške koje funkcija može da vrati se koristi funkcija gai_strerror. Primer: daytime6

Primer: Funkcija getaddrinfo struct addrinfo hints; /* Struktura podataka koja opisuje zeljenu adresu. */ struct addrinfo *address; /* Lista adresa koje odgovaraju datom host-u i servisu. */ struct addrinfo *curr; /* Tekuci element gornjeg polja. */ /* Priprema se struktura podataka sa opisom zeljene adrese. */ bzero (&hints, sizeof (struct addrinfo)); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; /* Odredjuje se lista adresa koje odgovaraju datom host-u i servisu. */ Getaddrinfo (host, service, &hints, &address)); /* U petlji se prolazi kroz listu adresa i pokusava vezivanje za svaku od njih. */ for (curr = address; curr!= NULL; curr = curr->ai_next) { /* Kreira se socket,... */ if ((server = socket (curr->ai_family, curr->ai_socktype, curr->ai_protocol)) <0) continue; /*...a zatim se pokusava sa povezivanjem. if (connect (server, curr->ai_addr, curr->ai_addrlen) == 0) break;... }

Informacije o soketu

Informacije o soketu Kada je poznat samo fajl deskriptor soketa, za dobijanje informacija o soketu se mogu koristiti funkcije getsockname i getpeername. Obe popunjavaju strukturu sockaddr, prva lokalnom adresom koja je pridružena soketu, dok druga popunjava strukturu adresom sa kojom je konektovan soket. Situacije u kojima se koristi getsockname: - Kada se connect vrati u TCP klijentu, vraća pridruženu IP adresu i lokalni port; posle poziva bind sa brojem porta 0; ako server pozove bind sa wildcard na mestu IP adrese. Kada server pozove exec posle accept, child proces više nema informacije iz adresne strukture koju je popunila accept, pa poziva getpeername. Primer: daytime7

Primer: Informacije o soketu struct sockaddr address; /* Adresa sa informacijma o peer-u. */ socklen_t length; /* Velicina prethodne strukture. */ struct sockaddr_in *addrin; /* Pomocni pokazivac. */ char name[16]; /* Ime adrese. */ /* Getpeername ocekuje da se trecim argumentom prosledi koliko je mesta rezervisano * promenljivom address. U promenljivoj length se nakon povratka nalazi velicina adrese. */ length = sizeof (struct sockaddr); if (getpeername (server, &address, &length) < 0) error_fatal ("%s getpeername() error: %s\n", program, strerror (errno)); /* Ukoliko je u pitanju struktura za IP adrese... */ if (length == sizeof (struct sockaddr_in)) { /*...racuna se prezentacija na osnovu numericke vrednosti... */ addrin = (struct sockaddr_in *) &address; if (inet_ntop (AF_INET, &(addrin->sin_addr), name, 16) == 0) error_fatal ("%s inet_ntop() error: %s\n", program, strerror (errno)); /*...i ispisuju IP adresa i port. */ printf ("Peer info %s:%d\n", name, ntohs (addrin->sin_port)); }

Informacije o soketu Informacije o hostu i servisu se na osnovu strukture sockaddr mogu dobiti i funkcijom getnameinfo. if ((error = getnameinfo (&address, length, hostname, NI_MAXHOST, port, NI_MAXSERV, NI_NUMERICHOST NI_NUMERICSERV))!= 0) printf ("%s getnameinfo() error: %s\n", argv[0], gai_strerror (error)); else printf ("Connection from %s:%s\n", hostname, port);