Sniffer Bắt gói tin, tại sao sockaddr_in->port phải bằng 0, (WinSock.h)?

Hi mọi người, mình đang thực hành bắt một số gói tin sử dụng raw socket của thư viện winsock, khi tham khảo trên mạng thì mình ko hiểu đoạn code này…

/*Full source https://github.com/tranphuquy19/PacketSniffer/blob/master/SnippetProject/SnifferApp.cpp */
//...line 175
dest.sin_family = AF_INET;
dest.sin_port = 0;

printf("\nBinding socket to local system and port 0 ...");
	if (bind(sniffer, (struct sockaddr*) & dest, sizeof(dest)) == SOCKET_ERROR) 
		/*cast sockaddr_in ve sockaddr thi 2byte dau la family socket(vd: AF_INET),
		14bytes tiep theo cua sockadd.sa_data bao gom sin_port, sin_addr cua sockaddr_in
		*/
	{
		printf("bind(%s) failed.\n", inet_ntoa(addr));
		return 1;
	}
	printf("Binding successful");

Trong đó đoạn cast từ sockaddr_in về sockaddr thì mình đã hiểu và comment như bên trên, nhưng trong đoạn code này mình vẫn ko hiểu tại sao phải gắn port bằng 0 cho Socket sniffer. Theo mình hiểu thì là sniffer có thể lắng nghe mọi gói tin có dest port khác nhau thay vì 1 port cụ thể, không biết như vậy có đúng ko nhỉ? Xin mn giải đáp giúp mình :yum:

Thanhs mọi người đã đọc bài :wink:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?