Rede de Computadores
Relatório Final
Mestrado em Engenharia Informática e Computação
EIC0032 – Redes de Computadores
Grupo:
Antonieta Oliveira – ei07157
Ricardo Amorim – ei08103
Introdução
Numa fase inicial, desenvolveu-se um cliente FTP simples cujo objetivo seria
implementar as diversas fases de negociação bem como a transferência de um
arquivo alojado no servidor. Esta aplicação, desenvolvida na linguagem C, faz uso das
diversas potencialidades do protocolo referido e do conceito de sockets no ambiente
UNIX.
Já numa segunda fase foi feita a configuração de uma rede local de
computadores e o respetivo estudo e interpretação dos conceitos envolvidos.
No final foi utilizada a aplicação desenvolvida na primeira fase para transferir
um arquivo que se encontrava num servidor FTP através da rede configurada na
segunda fase.
Sumário
O relatório constitui uma análise detalhada da implementação feita, bem como
dos resultados obtidos ao longo das experiências feitas. Inicialmente será feita uma
descrição da fase de desenvolvimento da aplicação de download, posteriormente
abordar-se-ão as várias experiências da segunda fase do projeto e a respetiva análise
dos resultados obtidos, incluindo a parte respeitante à utilização da aplicação na rede
configurada e no final concluir-se-á acerca dos conceitos envolvidos em todo o projeto
bem como a sua importância.
Ao longo da análise serão apresentados os comandos mais importantes
utilizados na configuração da rede.
2
Parte 1 – Aplicação de download
A aplicação foi desenvolvida em linguagem C e num único ficheiro, download.c,
destinando-se a implementar uma versão simplificada do protocolo FTP. Esta
implementação inclui as fases de negociação com o servidor, como por exemplo a
autenticação opcional, a criação dos sockets de controlo e de dados e posterior
transferência do ficheiro especificado.
A sintaxe de chamada da aplicação segue o especificado na norma RFC1738:

ftp://<username>:<password>@<host>/<url-path>
Um exemplo da utilização desta sintaxe, que foi utilizado nos testes durante o
desenvolvimento é “ftp://ftp.up.pt/pub/robots.txt” .
Após a verificação do número de argumentos recebidos, é feita a separação do
URL recebido nos diferentes componentes: nome de utilizador, respetiva password,
host, e caminho para o ficheiro. Esta separação foi feita com recurso à função sscanf
da linguagem C juntamente com uma expressão regular, o que permite a rejeição em
caso de falta de argumentos ou da sua especificação estar errada.
Depois da operação do parser, a fase de ligação ao servidor faz uso de um
socket, representando o canal de controlo, que é aberto através da porta do servidor
destinada ao protocolo FTP (porta 21). Para esta ligação são utilizadas as
funcionalidades do serviço DNS, para converter o nome do servidor para o seu
endereço IP.
Após a abertura do canal de controlo, é feita a autenticação com os dados
obtidos a partir do URL. Esta autenticação tem em conta a resposta do servidor,
nomeadamente a aceitação ou rejeição do nome de utilizador ou da password
fornecidos sendo que no caso de rejeição a aplicação termina.
Depois da autenticação estar garantida é feito um pedido ao servidor para a
transferência de um arquivo no modo passivo. Este modo aplica-se para situações em
que, por exemplo o cliente se encontra protegido por uma firewall e portanto incapaz
de aceitar ligações TCP (o que acontece no modo ativo). Desta forma o cliente fica
responsável por abrir o canal de dados para a ligação TCP com o mesmo IP utilizado
para o canal de controlo, mas com a porta calculada com base na resposta do servidor
ao comando “pasv”. O número da porta é obtido com 256*MSB+LSB e é então aberto
o socket para a transferência de dados.
3
Por fim, é enviado o pedido para transferência do ficheiro através do comando
“retr” ao que o servidor responde com o início da transmissão sobre o canal de dados.
Após esta transferência são fechados os dois canais (sockets) bem como o ficheiro
aberto e a aplicação termina a execução.
Na figura 1 apresenta-se o exemplo de uma transferência do ficheiro
“japanese.xml” alojado num servidor ftp com nome de utilizador e password “test”,
juntamente com as respetivas respostas do servidor no decorrer do processo.
O código fonte desenvolvido pode ser consultado em “código fonte do cliente
FTP”.
Parte 2 – Configuração e análise da rede no laboratório
2.1 – Configurar rede IP
Inicialmente foi desligado o cabo que liga o switch ao router laboratorial
(resultando na perda do acesso à internet dos terminais). De seguida, configuraram-se
o tux1 e tux4 com os endereços necessários para garantir a comunicação entre eles.
Depois da eliminação da tabela ARP, que constitui um meio de facilitar o
reconhecimento dos endereços mac associados aos endereços IP, utilizou-se o
comando ping para testar a conectividade. O não reconhecimento do endereço
fornecido faz com que sejam enviados pacotes ARP para obter o endereço físico do
recetor. O cliente envia um pacote ARP para o endereço de broadcast que
reencaminha o pacote para todos os terminais. Posteriormente, o terminal que tiver o
endereço IP contido no pacote enviado irá responder com o seu endereço físico.
Para uma melhor eficiência, este endereço é temporariamente guardado na
tabela ARP, que armazena correspondências do tipo ARP-IP, evitando assim novos
pedidos posteriores durante esse tempo.
O registo 2.a evidencia o comportamento do protocolo.
O comando “ping” gera pacotes ICMP com mensagens de pedido e resposta –
echo request e echo reply - que contêm os endereços de origem e destino.
Cada pacote ethernet transmitido é diferenciado com base no seu cabeçalho:
no caso de ser um pacote IP, o seu cabeçalho terá o valor 0x0800; por outro lado se
se tratar de um pacote ARP, o cabeçalho será igual a 0x0806.
4
2.2 – Virtual LAN
Na segunda parte configuraram-se duas Virtual Lans e atribuíram-se as
respetivas interfaces, garantido a conformidade com o especificado – tux 1 e 4
pertencentes à primeira, e tux 2 pertencente à segunda.
Em primeiro lugar foram criadas as duas vlans no switch e adicionados os tuxs,
sendo que para isso foi necessário configurar o tux2. Os comandos apresentam-se
nas tabelas 3.b.i e 3.b.ii.
Após nova utilização do comando ping verificou-se que existia conectividade
entre os TUXs 1 e 4, mas nenhum destes podia comunicar com o tux2. Isto acontece
devido ao facto de estarem em redes distintas (e como tal o resultado de um pacote
enviado será “Destination Unreachable”). Por outro lado fez-se também o teste em
relação aos endereços de broadcast (ping –b [...]) e constatou-se que também se
encontram em broadcasts distintos, pelo que se conclui que há um endereço de
broadcast para cada vlan.
2.3 – Configuração de um router em Linux
Neste passo, transformámos o tux4 num router, de forma a permitir a
comunicação entre o tux1 e o tux2. Para isso foram utilizados os comandos conforme
as tabelas 3.c.i e 3.c.ii.
Esta configuração faz com que cada interface do tux4 esteja ligada a uma vlan,
e que este possa funcionar como router, reencaminhando os pacotes recebidos. De
seguida foi necessário reconfigurar os tuxs 1 e 2 com os comandos da tabela 3.c.iii, de
modo a garantir a sua comunicação. Por fim, a comunicação entre os dois TUXs, 1 e 2,
já é possível.
As rotas disponíveis em cada tux garantem que os pacotes transitam entre as
duas sub-redes, passando pelo tux4. Observou-se também a troca de pacotes ARP
para o reconhecimento do tux2, uma vez que a tabela ARP dos tuxs 1 e 4 ainda não
tinha uma entrada com o seu endereço.
2.4 – Configurar Router commercial e implementar NAT
Nesta parte, foi adicionado à rede um router comercial com o intuito de fornecer
acesso a uma rede externa aos tuxs anteriormente configurados.
5
A configuração do router passa por atribuir as interfaces para a rede
configurada respeitando as ligações feitas entre o router e o switch, e adicionar as
rotas para garantir a comunicação de todos os TUXs. A configuração utilizada pode
ser consultada na 3.d.i. Como se pode observar nesta tabela, as rotas estáticas são
adicionadas segundo o comando “ip route <ip_destino> <máscara> <gateway>”.
De seguida, o router foi definido como default gateway do quer do tux4
(interface eth1) quer do tux2. Para mostrar a existência de comunicação foi feito ping a
partir do tux1 para as interfaces do tux4 e do router.
Com esta configuração, os pacotes transitam do tux1 para o tux4 e to tux4 para
o router ou para o tux2, conforme o seu endereço de destino.
Neste ponto da experiência as tentativas de contacto com a rede exterior não
recebem resposta. Esta situação deve-se ao facto de os terminais exteriores não
terem forma de saber qual o endereço para onde devem responder dado que todos os
TUXs são vistos como tendo o mesmo endereço. Esta situação resolve-se recorrendo
à funcionalidade NAT do router comercial da bancada. Com esta funcionalidade, os
endereços da rede são mapeados para endereços públicos, e a resposta já é
concretizável. Mais uma vez, a configuração feita pode ser consultada na tabela 3.d.ii.
Nesta configuração optou-se por incluir o tux4 no conjunto de endereços a
mapear, garantindo assim a sua comunicação com o exterior.
A configuração feitaa até agora é apresentada na imagem seguinte:
2.5 – DNS
Com o objetivo de se poder utilizar diretamente o hostname em vez do seu
endereço IP, foi implementada a funcionalidade DNS. Desta vez, a configuração
passou por editar o ficheiro resolv.conf de cada TUX (localizado em /etc/resolv.conf) e
mudar o seu conteúdo para:
6
Search netlab.fe.up.pt
Nameserver 172.16.1.2
Com esta configuração foi então possível fazer, por exemplo, “ping
www.sapo.pt” e obter resposta do servidor. Este pedido subdivide-se em duas fases:
inicialmente, o tux pergunta ao servidor DNS (172.16.1.2) qual o IP que corresponde
ao endereço fornecido. O servidor responde com vários endereços IP, dos quais é
escolhido o primeiro para o envio dos pacotes ICMP.
2.6 – Protocolo FTP
No teste da aplicação desenvolvida anteriormente foi feita uma transferência de
um ficheiro com um cerca de 600MB a partir do servidor ftp da Universidade do Porto.
Uma vez que a rede da universidade é bastante complexa, o comportamento
observado afastou-se ligeiramente da situação ideal, em que haveria um pico de
velocidade inicial, vindo a estabilizar posteriormente.
Na situação real, o gráfico apresenta uma forma mais irregular, evidenciando
os diversos fatores que influenciam a velocidade de transferência de um ficheiro:
Fig. 1 Transferência de um único TUX
Na situação seguinte, o cliente ftp foi executado em dois dos Tuxs (1 e 2), de
modo a observar a gestão de tráfego feita. Nesta situação é possível observar um
decréscimo da velocidade no tux1 quando o tux2 inicia a transferência. De igual modo,
o pico de velocidade atingido no tux2 é menor do que aquele atingido inicialmente no
tux1. Estes factos demonstram a execução da política de gestão de congestionamento
de tráfego que é feita pelos intervenientes no processo.
A figura seguinte evidencia o decréscimo da velocidade de transferência no
tux1, quando o tux2 inicia outra transferência mostrando um equilíbrio de pacotes que
transitam na rede para cada tux:
7
Fig. 2 Transferência do TUX1, em simultâneo com o TUX2
A comunicação com o servidor é feita através de dois canais: o canal de
controlo onde transitam todos os comandos para a obtenção do ficheiro, e o canal de
dados, por onde são enviados todos os dados deste. É feito um pedido inicial ao
servidor de DNS pelo endereço IP do servidor FTP sendo seguido pelo processo de
transferência sobre o protocolo TCP.
Conclusão
Terminado o projeto foram consolidados os conhecimentos acerca das redes
de computadores, bem como a sua importância para a atualidade. Por outro lado, os
conceitos relacionados com os diversos protocolos envolvidos (TCP, ARP, entre
outros) foram mais facilmente interiorizados graças à sua divisão em experiências
laboratoriais.
Foi também evidente a importância da organização das redes de computadores
em sub-redes e a razão pela qual se tem dado cada vez mais importância a
mecanismos de controlo de tráfego e de resolução de congestionamentos.
8
ANEXOS
1. Imagens de execução
2. LOGS parciais
a. Protocolo ARP
Source
Destination
Protocol
Info
Kye_08:d5:b3
Broadcast
ARP
Who
has
172.16.40.254?
Tell
172.16.40.1
Hewlett-
Kye_08:d5:b
_c7:64:8e
3
172.16.40.1
172.16.40.25
ARP
172.16.40.254 is at 00:21:5a:c7:64:8e
ICMP
Echo (ping) request
ICMP
Echo (ping) reply
4
172.16.40.254
172.16.40.1
Log 1 – funcionamento do protocolo ARP
b. Comunicação do tux1 com as restantes interfaces
tux1 >> ping 172.16.40.254
(TUX4.eth0)
64 bytes from 172.16.40.254: icmp_seq=1 ttl=64 time=0.199ms
tux1>> ping 172.16.41.253
(TUX4.eth1)
64 bytes from 172.16.41.253: icmp_seq=1 ttl=64 time=0.190ms
9
tux1>> ping 172.16.41.254
(Router)
64 bytes from 172.16.41.254: icmp_seq=1 ttl=254 time=0.563ms
Log 2 – Comunicação do tux1 com as interfaces na rede
3. CONFIGURAÇÕES
a. Exp1
i. Configurar interfaces tux1 e 4
tux1 >> ifconfig eth0
//ativar interface eth0
tux1>> ifconfig eth0 172.16.Y01/24
//atribuir endereço IP
tux4>> ifconfig eth0 up
tux4>> ifconfig eth0 172.16.Y0.254/24
Configuração 1 – interfaces dos tuxs 1 e 4
b. Exp2
i. Interface do Tux2
tux2 >> ifconfig etho up
//ativar interface eth0
tux2>> ifconfig eth0 172.16.Y1./24
//endereço pertence a vlan1
Configuração 2 – interface do tux2
ii. Configuração do Switch
>>vlan Y0
//criar virtual lan 0
>>vlan Y1
//criar virtual lan 1
>>interface fastethernet 0/1
//interface do TUX1
>>switchport access vlan Y0
//atribuir interface à vlan0
>>interface fastethernet 0/4
//interface do TUX4
>>switchport access vlan Y0
//atribuir interface à vlan0
>>interface fasethernet 0/2
//interface do TUX2
>>switchport access vlan Y1
//atribuir interface à vlan1
Configuração 3 – configuração do switch
10
c. Exp3
i. Interface tux4.eth1
tux4 >> ifconfig eth1 up
//ativar interface eth1
tux4>> ifconfig eth1 172.16.Y1.253
//atribuir endereço IP
tux4>> echo 1 > /[...]/IP_FORWARD
//ativar reencaminhamento
tux4>> echo 0 > /[...]/ICMP_ECHO_IGNORE_BROADCASTS
Configuração 4 – interface eth1 do tux4
ii. Adicionar interface à vlan1
>>interface fasethernet 0/5
//interface eth1 do TUX4
>>switchport access vlan Y1
//atribuir interface à vlan1
Configuração 5 - Adicionar interface eth1 à vlan1
iii. Reconfiguração das interfaces
tux1>> route add default gw 172.16.Y0.254
//interface eth0 do TUX4
tux2>>route add default gw 172.16.Y1.253
// interface eth1 do TUX4
Configuração 6 – reconfigurar interfaces
d. Exp4
i. Configurar router comercial
>>interface gigabitethernet 0/0
//interface 0
>>ip address 172.16.Y1.254 255.255.255.0
>>interface gigabitethernet 0/1
//interface 1
>>ip address 172.16.1.Y9 255.255.255.0
>>ip route 0.0.0.0 0.0.0.0 172.16.1.254
//rede exterior
>>ip route 172.16.Y0.0 255.255.255.0
//vlanY0
Configuração 7 – comandos para a configuração do router
11
ii. Configurar NAT
>> interface gigabitethernet 0/0
>>no shutdown
>>ip nat inside
>> interface gigabitethernet 0/1
>>no shutdown
>>ip nat outside
>>ip nat pool ovrld 172.16.1.49 172.16.1.49 prefix 24
>>ip nat inside source list 1 pool ovrld overload
>>access-list 1 permit 172.16.40.0 0.0.0.255
>> access-list 1 permit 172.16.41.0 0.0.0.255
Configuração 8 – configuração do serviço NAT no router
12
4. código fonte do cliente FTP
5. #include <stdio.h>
6. #include <sys/types.h>
7. #include <sys/socket.h>
8. #include <netinet/in.h>
9. #include <arpa/inet.h>
10.
#include <stdlib.h>
11.
#include <unistd.h>
12.
#include <signal.h>
13.
#include <netdb.h>
14.
#include <strings.h>
15.
#include <string.h>
16.
#include <errno.h>
17.
#include <netdb.h>
18.
19.
#define TRUE 1
20.
#define FALSE 0
21.
#define SIZE 256
22.
23.
//TAMANHO MAXIMO DA RESPOSTA DO SERV
24.
#define MSG_LEN 1024
25.
26.
//PORTA TCP DO SERVIDOR
27.
#define SERVER_PORT 21
28.
29.
char SERVER_ADDR[SIZE];
30.
31.
32.
//RECEBER buff DO SERVIDOR
33.
int receive_cmd(int fd, char* buffer) {
34.
//sleep(1);
35.
memset(buffer, (char) '\0', strlen(buffer));
36.
return read(fd, buffer, MSG_LEN);
37.
}
38.
39.
40.
//ENVIAR COMANDO PARA O SERVIDOR
41.
void send_cmd(int fd, char* buffer) {
42.
char tmp_cmd[SIZE];
43.
memcpy(tmp_cmd, buffer, sizeof(char)*SIZE);
44.
printf("\n>> %s", tmp_cmd);
45.
strcat(tmp_cmd, "\r\n");
46.
write(fd, tmp_cmd, sizeof(char) * strlen(tmp_cmd));
47.
}
48.
49.
50.
int main(int argc, char** argv){
51.
52.
53.
if(argc < 2)
54.
{
55.
printf("USAGE: %s
ftp://<username>:<password>@<host>/<url_path>\n", argv[0]);
56.
exit(1);
57.
}
58.
59.
struct hostent *h;
60.
61.
//LIG. CONTROLO
62.
int sockfd = (int) NULL;
13
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
struct sockaddr_in server_addr;
//LIG. DADOS
int sockfd2 = (int) NULL;
struct sockaddr_in server_addr2;
char host[SIZE];
//PATH DO FICHEIRO
char file_path[SIZE];
//USER
char user_name[SIZE];
//PASSWORD
char pw[SIZE];
//BUFFER PARA AS RESPOSTAS DO SERV.
char buff[MSG_LEN];
//FICHEIRO DESTINO
FILE* f=NULL;
//USER E PASS ESPECIFICADOS
if(strchr(argv[1], '@') != NULL)
{
sscanf(argv[1],
"ftp://%[^:]:%[^@]@%[^/]/%[^\n]",user_name, pw, host, file_path);
85.
}
86.
87.
//USER E PASS PRE' DEFINIDOS
88.
else {
89.
sscanf(argv[1], "ftp://%[^/]/%[^\n]", host,
file_path);
90.
memcpy(user_name, "anonymous", sizeof(char) * SIZE);
91.
memcpy(pw, "[email protected]", sizeof(char) *
SIZE);
92.
}
93.
94.
printf("\nLIGAR A: %s\nUTILIZADOR: %s\nPASSWORD: %s", host,
user_name, pw);
95.
96.
if ((h=gethostbyname(host)) == NULL) {
97.
herror("gethostbyname");
98.
exit(1);
99.
}
100.
101.
memcpy(SERVER_ADDR, inet_ntoa(*((struct in_addr *)h>h_addr)), sizeof(char)*SIZE);
102.
103.
//SOCKET PARA LIG DE CONTROLO
104.
/*server address handling*/
105.
bzero((char*)&server_addr,sizeof(server_addr));
106.
server_addr.sin_family = AF_INET;
107.
server_addr.sin_addr.s_addr = inet_addr(SERVER_ADDR); /*32
bit Internet address network byte ordered*/
108.
server_addr.sin_port = htons(SERVER_PORT);
109.
/*server TCP port must be network byte ordered */
110.
/*open an TCP socket*/
111.
if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0) {
112.
perror("socket()");
113.
exit(0);
114.
}
115.
116.
/*connect to the server*/
117.
if(connect(sockfd,
14
118.
(struct sockaddr *)&server_addr,
119.
sizeof(server_addr)) < 0){
120.
perror("connect()");
121.
exit(0);
122.
}
123.
124.
printf("\nABERTO SOCKET [CONTROLO] EM [ %s:%d ]\n",
SERVER_ADDR, SERVER_PORT);
125.
while(TRUE)
126.
{
127.
receive_cmd(sockfd, buff);
128.
if(strncmp(buff, "220", 3) != 0)
129.
{
130.
131.
printf("\nERRO: ESPERAVA CODIGO 220 [%s]...",
buff);
132.
break;
133.
}
134.
135.
//USER + PASS = 230
136.
char user[SIZE];
137.
sprintf(user, "user %s", user_name);
138.
//ENVIAR USER
139.
send_cmd(sockfd, user);
140.
//ESPERAR RESPOSTA
141.
receive_cmd(sockfd, buff);
142.
printf("\n<< %s", buff);
143.
144.
char pass[SIZE];
145.
sprintf(pass, "pass %s", pw);
146.
//ENVIAR PASS
147.
send_cmd(sockfd, pass);
148.
//ESPERAR RESPOSTA
149.
receive_cmd(sockfd, buff);
150.
printf("\n<< %s", buff);
151.
152.
if(strncmp(buff, "230", 3) != 0)
153.
{
154.
printf("\nERRO: LOGIN INCORRETO");
155.
break;
156.
}
157.
158.
//ENVIAR COMANDO SERVIDOR -> MODO PASSIVO
159.
send_cmd(sockfd, "pasv");
160.
receive_cmd(sockfd, buff);
161.
printf("\n<< %s", buff);
162.
if(strncmp(buff, "227", 3) != 0) {
163.
printf("\nERRO: MODO PASSIVO [ %s ]", buff);
164.
break;
165.
}
166.
167.
//CALCULAR PORTA DA LIG DADOS
168.
int msB, lsB;
169.
sscanf(buff, "%*[^(](%*d,%*d,%*d,%*d,%d,%d)\n", &msB,
&lsB);
170.
int dest_port = msB*SIZE + lsB;
171.
172.
//ABRIR SOCKET LIG DADOS
173.
/*server address handling*/
174.
bzero((char*)&server_addr2,sizeof(server_addr2));
175.
server_addr2.sin_family = AF_INET;
15
176.
server_addr2.sin_addr.s_addr =
inet_addr(SERVER_ADDR);
177.
/*32 bit Internet address network byte ordered*/
178.
server_addr2.sin_port = htons(dest_port);
179.
/*server TCP port must be network byte ordered */
180.
/*open an TCP socket*/
181.
if ((sockfd2 = socket(AF_INET,SOCK_STREAM,0)) < 0) {
182.
perror("socket()");
183.
exit(0);
184.
}
185.
/*connect to the server*/
186.
if(connect(sockfd2,
187.
(struct sockaddr *)&server_addr2,
188.
sizeof(server_addr2)) < 0){
189.
perror("connect()");
190.
exit(0);
191.
}
192.
printf("\nABERTO SOCKET [DADOS] EM [ %s:%d ]",
SERVER_ADDR, dest_port);
193.
//ENVIAR PEDIDO RETR
194.
195.
char retr_cmd[SIZE];
196.
sprintf(retr_cmd, "retr %s", file_path);
197.
send_cmd(sockfd, retr_cmd);
198.
char* fileName;
199.
fileName = strrchr(file_path,'/');
200.
if(fileName != NULL) {
201.
fileName++;
202.
}
203.
else{
204.
fileName = file_path;
205.
}
206.
receive_cmd(sockfd, buff);
207.
printf("\n<< %s", buff);
208.
if(strncmp(buff, "550", 3) == 0) {
209.
printf("\nERRO: ACESSO AO FICHEIRO [ %s",
buff);
210.
exit(-1);
211.
}
212.
//ABRIR FICHEIRO PARA ESCRITA
213.
f = fopen((const char *) fileName, "wb");
214.
float n_bytes = 1.0;
215.
float total_bytes = 0.0;
216.
while(n_bytes != 0) {
217.
int bytes = receive_cmd(sockfd2, buff);
218.
n_bytes = fwrite(buff, sizeof(char), bytes, f);
219.
if(total_bytes < 1024)
220.
{
221.
printf("\n[ %f B GRAVADOS ]",
total_bytes+=n_bytes);
222.
}
223.
else if(total_bytes >= 1024 && total_bytes <
1048576)
224.
{
225.
printf("\n[ %.02f kB GRAVADOS ]",
(total_bytes+=n_bytes)/1024);
226.
}
227.
else
228.
{
229.
printf("\n[ %.02f MB GRAVADOS ]",
(total_bytes+=n_bytes)/1048576);
16
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
}
}
printf("\nTransferencia Concluida!");
break;
}
printf("\nENCERRAR SOCKETS\n");
if(f != NULL)
fclose(f);
if(sockfd2 != (int) NULL)
close(sockfd2);
if(sockfd != (int) NULL)
close(sockfd);
exit(0);
}
5. Makefile
all: download
client: download
./download
ftp://ftp.up.pt/pub/openoffice/packages/10/OOo_3.3.0_Win_x86_langpack_gu.exe
small: download
./download ftp://ftp.up.pt/pub/robots.txt
clienttcp: download.c
gcc -Wall -o download.o -c download.c
gcc -Wall -o app download.o
6. Logs capturados
a) Preenchimento da tabela ARP (exp1)
No.
Time
1 0.000000
60
Source
Destination
Cisco_d4:1c:03
Protocol Length Info
Spanning-tree-(for-bridges)_00 STP
Conf. Root = 32768/30/30:37:a6:d4:1c:00 Cost = 0 Port = 0x8003
Frame 1: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)
IEEE 802.3 Ethernet
Logical-Link Control
Spanning Tree Protocol
17
No.
Time
2 1.188901
Source
Destination
Kye_08:d5:b3
Protocol Length Info
Broadcast
ARP
42
Who has
172.16.40.254? Tell 172.16.40.1
Frame 2: 42 bytes on wire (336 bits), 42 bytes captured (336 bits)
Ethernet II, Src: Kye_08:d5:b3 (00:c0:df:08:d5:b3), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
Address Resolution Protocol (request)
No.
Time
Source
3 1.189019
Destination
Hewlett-_c7:64:8e
Protocol Length Info
Kye_08:d5:b3
ARP
60
172.16.40.254 is at 00:21:5a:c7:64:8e
Frame 3: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)
Ethernet II, Src: Hewlett-_c7:64:8e (00:21:5a:c7:64:8e), Dst: Kye_08:d5:b3
(00:c0:df:08:d5:b3)
Address Resolution Protocol (reply)
No.
Time
4 1.189034
Source
Destination
172.16.40.1
Protocol Length Info
172.16.40.254
ICMP
98
Echo
(ping) request id=0xe857, seq=1/256, ttl=64
Frame 4: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: Kye_08:d5:b3 (00:c0:df:08:d5:b3), Dst: Hewlett-_c7:64:8e
(00:21:5a:c7:64:8e)
b)Virtual Lans (exp2) – Não há conetividade com o TUX2
No.
Time
4 1.582047
Source
172.16.40.1
Destination
172.16.40.254
Protocol Length Info
ICMP
98
Echo (ping)
request id=0x4160, seq=1/256, ttl=64
Frame 4: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: Kye_08:d5:b3 (00:c0:df:08:d5:b3), Dst: Hewlett-_c7:64:8e
(00:21:5a:c7:64:8e)
18
Internet Protocol Version 4, Src: 172.16.40.1 (172.16.40.1), Dst: 172.16.40.254
(172.16.40.254)
Internet Control Message Protocol
No.
Time
5 1.582183
reply
Source
Destination
172.16.40.254
172.16.40.1
Protocol Length Info
ICMP
98
Echo (ping)
id=0x4160, seq=1/256, ttl=64
Frame 5: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: Hewlett-_c7:64:8e (00:21:5a:c7:64:8e), Dst: Kye_08:d5:b3
(00:c0:df:08:d5:b3)
Internet Protocol Version 4, Src: 172.16.40.254 (172.16.40.254), Dst: 172.16.40.1
(172.16.40.1)
Internet Control Message Protocol
No.
Time
6 2.004679
Source
Cisco_d4:1c:03
Destination
Protocol Length Info
Spanning-tree-(for-bridges)_00 STP
60
Conf. Root = 32768/40/30:37:a6:d4:1c:00 Cost = 0 Port = 0x8003
Frame 6: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)
IEEE 802.3 Ethernet
Logical-Link Control
Spanning Tree Protocol
No.
Time
Source
Destination
Protocol Length Info
19
7 2.585934
172.16.40.1
172.16.40.254
ICMP
98
Echo (ping)
request id=0x4160, seq=2/512, ttl=64
Frame 7: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: Kye_08:d5:b3 (00:c0:df:08:d5:b3), Dst: Hewlett-_c7:64:8e
(00:21:5a:c7:64:8e)
Internet Protocol Version 4, Src: 172.16.40.1 (172.16.40.1), Dst: 172.16.40.254
(172.16.40.254)
Internet Control Message Protocol
No.
Time
8 2.586057
reply
Source
Destination
172.16.40.254
172.16.40.1
Protocol Length Info
ICMP
98
Echo (ping)
id=0x4160, seq=2/512, ttl=64
Frame 8: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: Hewlett-_c7:64:8e (00:21:5a:c7:64:8e), Dst: Kye_08:d5:b3
(00:c0:df:08:d5:b3)
Internet Protocol Version 4, Src: 172.16.40.254 (172.16.40.254), Dst: 172.16.40.1
(172.16.40.1)
Internet Control Message Protocol
c)TUX4 como router – evidenciar conetividade entre TUX2 e TUX1
No.
Time
7 3.499337
Source
172.16.40.1
Destination
172.16.40.254
Protocol Length Info
ICMP
98
Echo (ping)
request id=0x0f19, seq=2/512, ttl=64
20
Frame 7: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: Kye_08:d5:b3 (00:c0:df:08:d5:b3), Dst: Hewlett-_c7:64:8e
(00:21:5a:c7:64:8e)
Internet Protocol Version 4, Src: 172.16.40.1 (172.16.40.1), Dst: 172.16.40.254
(172.16.40.254)
Internet Control Message Protocol
No.
Time
8 3.499462
reply
Source
Destination
172.16.40.254
172.16.40.1
Protocol Length Info
ICMP
98
Echo (ping)
id=0x0f19, seq=2/512, ttl=64
Frame 8: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: Hewlett-_c7:64:8e (00:21:5a:c7:64:8e), Dst: Kye_08:d5:b3
(00:c0:df:08:d5:b3)
Internet Protocol Version 4, Src: 172.16.40.254 (172.16.40.254), Dst: 172.16.40.1
(172.16.40.1)
Internet Control Message Protocol
No.
Time
9 3.901278
Source
172.16.40.1
Destination
172.16.41.253
Protocol Length Info
ICMP
98
Echo (ping)
request id=0x1019, seq=1/256, ttl=64
Frame 9: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: Kye_08:d5:b3 (00:c0:df:08:d5:b3), Dst: Hewlett-_c7:64:8e
(00:21:5a:c7:64:8e)
Internet Protocol Version 4, Src: 172.16.40.1 (172.16.40.1), Dst: 172.16.41.253
(172.16.41.253)
21
Internet Control Message Protocol
No.
Time
10 3.901407
reply
Source
Destination
172.16.41.253
172.16.40.1
Protocol Length Info
ICMP
98
Echo (ping)
id=0x1019, seq=1/256, ttl=64
Frame 10: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: Hewlett-_c7:64:8e (00:21:5a:c7:64:8e), Dst: Kye_08:d5:b3
(00:c0:df:08:d5:b3)
Internet Protocol Version 4, Src: 172.16.41.253 (172.16.41.253), Dst: 172.16.40.1
(172.16.40.1)
Internet Control Message Protocol
No.
Time
11 4.007141
Source
Destination
Cisco_d4:1c:03
Protocol Length Info
Spanning-tree-(for-bridges)_00 STP
60
Conf. Root = 32768/40/30:37:a6:d4:1c:00 Cost = 0 Port = 0x8003
Frame 11: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)
IEEE 802.3 Ethernet
Logical-Link Control
Spanning Tree Protocol
No.
Time
12 4.503331
Source
172.16.40.1
Destination
172.16.40.254
Protocol Length Info
ICMP
98
Echo (ping)
request id=0x0f19, seq=3/768, ttl=64
22
Frame 12: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: Kye_08:d5:b3 (00:c0:df:08:d5:b3), Dst: Hewlett-_c7:64:8e
(00:21:5a:c7:64:8e)
Internet Protocol Version 4, Src: 172.16.40.1 (172.16.40.1), Dst: 172.16.40.254
(172.16.40.254)
Internet Control Message Protocol
No.
Time
13 4.503473
reply
Source
Destination
172.16.40.254
172.16.40.1
Protocol Length Info
ICMP
98
Echo (ping)
id=0x0f19, seq=3/768, ttl=64
Frame 13: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: Hewlett-_c7:64:8e (00:21:5a:c7:64:8e), Dst: Kye_08:d5:b3
(00:c0:df:08:d5:b3)
Internet Protocol Version 4, Src: 172.16.40.254 (172.16.40.254), Dst: 172.16.40.1
(172.16.40.1)
Internet Control Message Protocol
No.
Time
14 4.907332
Source
172.16.40.1
Destination
172.16.41.253
Protocol Length Info
ICMP
98
Echo (ping)
request id=0x1019, seq=2/512, ttl=64
Frame 14: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: Kye_08:d5:b3 (00:c0:df:08:d5:b3), Dst: Hewlett-_c7:64:8e
(00:21:5a:c7:64:8e)
Internet Protocol Version 4, Src: 172.16.40.1 (172.16.40.1), Dst: 172.16.41.253
(172.16.41.253)
23
Internet Control Message Protocol
No.
Time
15 4.907471
reply
Source
Destination
172.16.41.253
172.16.40.1
Protocol Length Info
ICMP
98
Echo (ping)
id=0x1019, seq=2/512, ttl=64
Frame 15: 98 bytes on wire (784 bits), 98 bytes captured (784 bits)
Ethernet II, Src: Hewlett-_c7:64:8e (00:21:5a:c7:64:8e), Dst: Kye_08:d5:b3
(00:c0:df:08:d5:b3)
Internet Protocol Version 4, Src: 172.16.41.253 (172.16.41.253), Dst: 172.16.40.1
(172.16.40.1)
Internet Control Message Protocol
d)Transferência do ficheiro
No.
Time
Source
4 3.587566
172.16.40.1
Destination
172.16.1.2
Protocol Length Info
DNS
69
Standard
query A ftp.up.pt
Frame 4: 69 bytes on wire (552 bits), 69 bytes captured (552 bits)
Ethernet II, Src: Kye_08:d5:b3 (00:c0:df:08:d5:b3), Dst: Hewlett-_c7:64:8e
(00:21:5a:c7:64:8e)
Internet Protocol Version 4, Src: 172.16.40.1 (172.16.40.1), Dst: 172.16.1.2
(172.16.1.2)
User Datagram Protocol, Src Port: 59492 (59492), Dst Port: domain (53)
24
Domain Name System (query)
No.
Time
Source
5 3.588737
Destination
172.16.1.2
172.16.40.1
Protocol Length Info
DNS
337
Standard
query response A 193.136.37.8
Frame 5: 337 bytes on wire (2696 bits), 337 bytes captured (2696 bits)
Ethernet II, Src: Hewlett-_c7:64:8e (00:21:5a:c7:64:8e), Dst: Kye_08:d5:b3
(00:c0:df:08:d5:b3)
Internet Protocol Version 4, Src: 172.16.1.2 (172.16.1.2), Dst: 172.16.40.1
(172.16.40.1)
User Datagram Protocol, Src Port: domain (53), Dst Port: 59492 (59492)
Domain Name System (response)
No.
Time
Source
6 3.589074
172.16.40.1
Destination
193.136.37.8
Protocol Length Info
TCP
74
48687 > ftp
[SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 TSval=2196501
TSecr=0 WS=32
Frame 6: 74 bytes on wire (592 bits), 74 bytes captured (592 bits)
Ethernet II, Src: Kye_08:d5:b3 (00:c0:df:08:d5:b3), Dst: Hewlett-_c7:64:8e
(00:21:5a:c7:64:8e)
Internet Protocol Version 4, Src: 172.16.40.1 (172.16.40.1), Dst: 193.136.37.8
(193.136.37.8)
Transmission Control Protocol, Src Port: 48687 (48687), Dst Port: ftp (21), Seq: 0,
Len: 0
25
No.
Time
7 3.590019
Source
Destination
193.136.37.8
172.16.40.1
Protocol Length Info
TCP
74
ftp > 48687
[SYN, ACK] Seq=0 Ack=1 Win=65228 Len=0 MSS=1460 WS=16 SACK_PERM=1
TSval=1943451950 TSecr=2196501
Frame 7: 74 bytes on wire (592 bits), 74 bytes captured (592 bits)
Ethernet II, Src: Hewlett-_c7:64:8e (00:21:5a:c7:64:8e), Dst: Kye_08:d5:b3
(00:c0:df:08:d5:b3)
Internet Protocol Version 4, Src: 193.136.37.8 (193.136.37.8), Dst: 172.16.40.1
(172.16.40.1)
Transmission Control Protocol, Src Port: ftp (21), Dst Port: 48687 (48687), Seq: 0,
Ack: 1, Len: 0
No.
Time
8 3.590075
Source
172.16.40.1
Destination
193.136.37.8
Protocol Length Info
TCP
66
48687 > ftp
[ACK] Seq=1 Ack=1 Win=5856 Len=0 TSval=2196502 TSecr=1943451950
Frame 8: 66 bytes on wire (528 bits), 66 bytes captured (528 bits)
Ethernet II, Src: Kye_08:d5:b3 (00:c0:df:08:d5:b3), Dst: Hewlett-_c7:64:8e
(00:21:5a:c7:64:8e)
Internet Protocol Version 4, Src: 172.16.40.1 (172.16.40.1), Dst: 193.136.37.8
(193.136.37.8)
Transmission Control Protocol, Src Port: 48687 (48687), Dst Port: ftp (21), Seq: 1,
Ack: 1, Len: 0
No.
Time
9 3.597304
Source
193.136.37.8
Destination
172.16.40.1
Protocol Length Info
FTP
106
Response:
220 Bem-vindo à Universidade do Porto
26
Frame 9: 106 bytes on wire (848 bits), 106 bytes captured (848 bits)
Ethernet II, Src: Hewlett-_c7:64:8e (00:21:5a:c7:64:8e), Dst: Kye_08:d5:b3
(00:c0:df:08:d5:b3)
Internet Protocol Version 4, Src: 193.136.37.8 (193.136.37.8), Dst: 172.16.40.1
(172.16.40.1)
Transmission Control Protocol, Src Port: ftp (21), Dst Port: 48687 (48687), Seq: 1,
Ack: 1, Len: 40
File Transfer Protocol (FTP)
No.
Time
Source
10 3.597436
172.16.40.1
Destination
193.136.37.8
Protocol Length Info
TCP
66
48687 > ftp
[ACK] Seq=1 Ack=41 Win=5856 Len=0 TSval=2196504 TSecr=1943451951
Frame 10: 66 bytes on wire (528 bits), 66 bytes captured (528 bits)
Ethernet II, Src: Kye_08:d5:b3 (00:c0:df:08:d5:b3), Dst: Hewlett-_c7:64:8e
(00:21:5a:c7:64:8e)
Internet Protocol Version 4, Src: 172.16.40.1 (172.16.40.1), Dst: 193.136.37.8
(193.136.37.8)
Transmission Control Protocol, Src Port: 48687 (48687), Dst Port: ftp (21), Seq: 1,
Ack: 41, Len: 0
No.
Time
Source
11 3.597545
172.16.40.1
Destination
193.136.37.8
Protocol Length Info
FTP
82
Request:
user anonymous
Frame 11: 82 bytes on wire (656 bits), 82 bytes captured (656 bits)
27
Ethernet II, Src: Kye_08:d5:b3 (00:c0:df:08:d5:b3), Dst: Hewlett-_c7:64:8e
(00:21:5a:c7:64:8e)
Internet Protocol Version 4, Src: 172.16.40.1 (172.16.40.1), Dst: 193.136.37.8
(193.136.37.8)
Transmission Control Protocol, Src Port: 48687 (48687), Dst Port: ftp (21), Seq: 1,
Ack: 41, Len: 16
File Transfer Protocol (FTP)
No.
Time
12 3.598240
Source
193.136.37.8
Destination
172.16.40.1
Protocol Length Info
TCP
66
ftp > 48687
[ACK] Seq=41 Ack=17 Win=66592 Len=0 TSval=1943451951 TSecr=2196504
Frame 12: 66 bytes on wire (528 bits), 66 bytes captured (528 bits)
Ethernet II, Src: Hewlett-_c7:64:8e (00:21:5a:c7:64:8e), Dst: Kye_08:d5:b3
(00:c0:df:08:d5:b3)
Internet Protocol Version 4, Src: 193.136.37.8 (193.136.37.8), Dst: 172.16.40.1
(172.16.40.1)
Transmission Control Protocol, Src Port: ftp (21), Dst Port: 48687 (48687), Seq: 41,
Ack: 17, Len: 0
28
Download

Rede de Computadores