wg-multicast - cli SAP announcement listener
Subject: All things related to multicast
List archive
- From: Ethan Sommer <>
- To:
- Subject: cli SAP announcement listener
- Date: Tue, 25 Sep 2007 10:34:45 -0500
As we've (Dan Oachs and I) been working on multicast routing, etc, I've often wanted to see if multicast was working to a particular host to which I only had ssh access (and sometimes only user level ssh access.)
After looking around, there didn't seem to be an easy way to test that.
Finally I got fed up and wrote a little program which joins the SAP announcement multicast group and outputs all the SAP announcements it sees. It can be run as a normal user (although you obviously won't be able open the firewall.)
Anyway, I thought some other people might find the program useful. I've included it below my signature.
Ethan
--
Ethan Sommer
Associate Director of Core Services
Gustavus Adolphus College
507-933-7042
/*
* listener.c -- joins a multicast group and echoes all data it receives from
* the group to its stdout...
*
* Antony Courtney, 25/11/94
* Modified by: Frédéric Bastien (25/03/04)
* to compile without warning and work correctly
*
* Modified by: Ethan Sommer to look for SAP Announcements (25/09/07)
* */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <string.h>
#include <stdio.h>
#define SAP_PORT 9875
#define SAP_GROUP "224.2.127.254"
#define MSGBUFSIZE 100000
main(int argc, char *argv[])
{
struct sockaddr_in addr;
int fd, nbytes,addrlen;
struct ip_mreq mreq;
char msgbuf[MSGBUFSIZE];
int x;
u_int yes=1; /*** MODIFICATION TO ORIGINAL */
/* create what looks like an ordinary UDP socket */
if ((fd=socket(AF_INET,SOCK_DGRAM,0)) < 0) {
perror("socket");
exit(1);
}
/**** MODIFICATION TO ORIGINAL */
/* allow multiple sockets to use the same PORT number */
if (setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes)) < 0) {
perror("Reusing ADDR failed");
exit(1);
}
/*** END OF MODIFICATION TO ORIGINAL */
/* set up destination address */
memset(&addr,0,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=htonl(INADDR_ANY); /* N.B.: differs from sender */
addr.sin_port=htons(SAP_PORT);
/* bind to receive address */
if (bind(fd,(struct sockaddr *) &addr,sizeof(addr)) < 0) {
perror("bind");
exit(1);
}
/* use setsockopt() to request that the kernel join a multicast group */
mreq.imr_multiaddr.s_addr=inet_addr(SAP_GROUP);
mreq.imr_interface.s_addr=htonl(INADDR_ANY);
if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) < 0) {
perror("setsockopt");
exit(1);
}
/* now just enter a read-print loop */
while (1) {
addrlen=sizeof(addr);
if ((nbytes=recvfrom(fd,msgbuf,MSGBUFSIZE,0,
(struct sockaddr *) &addr,&addrlen)) < 0) {
perror("recvfrom");
exit(1);
}
for (x=8;x<nbytes; x++) {
if (isprint(msgbuf[x])) putchar(msgbuf[x]);
else if (msgbuf[x]=='\r' || msgbuf[x]=='\n') putchar(msgbuf[x]);
else putchar('.');
}
printf("\n---\n");
}
}
- cli SAP announcement listener, Ethan Sommer, 09/25/2007
- Re: cli SAP announcement listener, Marshall Eubanks, 09/25/2007
- Re: cli SAP announcement listener, Nicholas J Humfrey, 09/25/2007
- testing multicast, Frank Fulchiero, 09/25/2007
- Message not available
- RE: testing multicast, Fulchiero, Frank (Information Services), 09/25/2007
- Re: testing multicast, Anibal Vega-Montijo, 09/26/2007
- Re: testing multicast, Nicholas J Humfrey, 09/26/2007
- Re: testing multicast, Alexander Y Ilin, 09/26/2007
- Re: testing multicast, Frank Fulchiero, 09/26/2007
- Re: testing multicast, Anibal Vega-Montijo, 09/26/2007
- Re: testing multicast, Frank Fulchiero, 09/26/2007
- Re: testing multicast, Anibal Vega-Montijo, 09/26/2007
- Re: testing multicast, Frank Fulchiero, 09/26/2007
- Message not available
- testing multicast, Frank Fulchiero, 09/25/2007
Archive powered by MHonArc 2.6.16.