//Brodcasting UDP Packets using BSD-based functions
//Autor: Mohamed Abdelsalam
//Systems Engineering Center [SEC], Dec-2014
import Cocoa
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
/////////Brodcasting UDP Packets using BSD-based functions////////
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
//Set local ip address............................................
var ipaddrStr = "192.168.13.54"
//................................................................
//Set input broadcast data .......................................
var txStr = "test test test test test test test"
var strLen = countElements(txStr)
//................................................................
//////////////////////////////////////////////////////////////////
//Get socket......................................................
let s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
//................................................................
//................................................................
var sin_me = sockaddr_in(
sin_len: __uint8_t(sizeof(sockaddr_in)),
sin_family: sa_family_t(AF_INET), //IP network
sin_port: in_port_t(0), //port number = 0
sin_addr: in_addr(s_addr: inet_addr(ipaddrStr)),
sin_zero: (0,0,0,0,0,0,0,0)
);
var sock_addr_me = sockaddr(sa_len: 0, sa_family: 0,
sa_data: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
memcpy(&sock_addr_me, &sin_me, UInt(sizeof(sockaddr_in)))
bind(s, &sock_addr_me, socklen_t(sizeof(sockaddr_in)))
//................................................................
//................................................................
var port_other:Int = 0;
var hostAddr_other = inet_addr("255.255.255.255");
var sin_other = sockaddr_in(
sin_len: __uint8_t(sizeof(sockaddr_in)),
sin_family: sa_family_t(AF_INET),
sin_port: in_port_t(0),
sin_addr: in_addr(s_addr: hostAddr_other.bigEndian),
sin_zero: (0,0,0,0,0,0,0,0)
);
var sock_addr_other = sockaddr(sa_len: 0, sa_family: 0,
sa_data: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
memcpy(&sock_addr_other, &sin_me, UInt(sizeof(sockaddr_in)))
//................................................................
//................................................................
var broadcastEnable:Int=1;
var ret=setsockopt(s, SOL_SOCKET, SO_BROADCAST,
&broadcastEnable, socklen_t(sizeof(socklen_t)));
var err:NSErrorPointer = nil;
let dataStr = NSData(bytes: &txStr, length: strLen)
var dataPtr:UnsafePointer = UnsafePointer<Void>(dataStr.bytes);
sendto(s, UnsafePointer<UInt8>(dataStr.bytes),
UInt(dataStr.length), Int32(0), &sock_addr_other,
socklen_t(sizeof(sockaddr_in)))
//................................................................
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
//////////////////////////////END/////////////////////////////////
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////