走過最難的TCP,接下來是比較簡單的環節了,這兩天,我們來實作一個基於UDP的DNS server
還是一樣,我們要從第二層構建header,但是和前幾天的TCP相比,我們只是把TCP的header換成TCP,所以_buildEthHeader
和_buildIPHeader
不變,這裡來為大家介紹_buildUDPHeader
的部分
完整程式如下
def _buildUDPHeader(dip, dest_port, udp_len, data):
udp_header = struct.pack('!4H', self.port, dest_port, udp_len, 0)
pseudo_header = struct.pack('!4s4sBBH', socket.inet_aton(self.ip), socket.inet_aton(dip), 0 , socket.IPPROTO_UDP, udp_len)
check_sum_of_udp = getUDPChecksum(pseudo_header + udp_header + data)
udp_header = struct.pack('!4H', self.port, dest_port, udp_len, check_sum_of_udp)
return udp_header
到目前為止,有了_buildEthHeader
、_buildIPHeader
和_buildUDPHeader
,接下來用這三個函數實作DNS server