forked from pool/netcat-openbsd
OBS-URL: https://build.opensuse.org/package/show/network:utilities/netcat-openbsd?expand=0&rev=29
94 lines
2.5 KiB
Diff
94 lines
2.5 KiB
Diff
From: Aron Xu <aron@debian.org>
|
|
Date: Mon, 13 Feb 2012 19:06:52 +0800
|
|
Subject: New flag '-b' for broadcast support
|
|
|
|
---
|
|
nc.1 | 4 +++-
|
|
netcat.c | 22 ++++++++++++++++++++--
|
|
2 files changed, 23 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/nc.1 b/nc.1
|
|
index da37f06..49a3d4d 100644
|
|
--- a/nc.1
|
|
+++ b/nc.1
|
|
@@ -33,7 +33,7 @@
|
|
.Nd arbitrary TCP and UDP connections and listens
|
|
.Sh SYNOPSIS
|
|
.Nm nc
|
|
-.Op Fl 46CDdFhklNnrStUuvZz
|
|
+.Op Fl 46bCDdFhklNnrStUuvZz
|
|
.Op Fl I Ar length
|
|
.Op Fl i Ar interval
|
|
.Op Fl M Ar ttl
|
|
@@ -93,6 +93,8 @@ The options are as follows:
|
|
Use IPv4 addresses only.
|
|
.It Fl 6
|
|
Use IPv6 addresses only.
|
|
+.It Fl b
|
|
+Allow broadcast.
|
|
.It Fl C
|
|
Send CRLF as line-ending. Each line feed (LF) character from the input
|
|
data is translated into CR+LF before being written to the socket. Line
|
|
diff --git a/netcat.c b/netcat.c
|
|
index 1c50615..99747a2 100644
|
|
--- a/netcat.c
|
|
+++ b/netcat.c
|
|
@@ -132,6 +132,7 @@
|
|
#define UDP_SCAN_TIMEOUT 3 /* Seconds */
|
|
|
|
/* Command Line Options */
|
|
+int bflag; /* Allow Broadcast */
|
|
int dflag; /* detached, no stdin */
|
|
int Fflag; /* fdpass sock to stdout */
|
|
unsigned int iflag; /* Interval Flag */
|
|
@@ -261,9 +262,9 @@ main(int argc, char *argv[])
|
|
|
|
while ((ch = getopt(argc, argv,
|
|
#ifdef HAVE_TLS
|
|
- "46C:cDde:FH:hI:i:K:klM:m:NnO:o:P:p:q:R:rSs:T:tUuV:vW:w:X:x:Z:z"))
|
|
+ "46bC:cDde:FH:hI:i:K:klM:m:NnO:o:P:p:q:R:rSs:T:tUuV:vW:w:X:x:Z:z"))
|
|
#else
|
|
- "46CDdFhI:i:klM:m:NnO:P:p:q:rSs:T:tUuV:vW:w:X:x:Zz"))
|
|
+ "46bCDdFhI:i:klM:m:NnO:P:p:q:rSs:T:tUuV:vW:w:X:x:Zz"))
|
|
#endif
|
|
!= -1) {
|
|
switch (ch) {
|
|
@@ -273,6 +274,13 @@ main(int argc, char *argv[])
|
|
case '6':
|
|
family = AF_INET6;
|
|
break;
|
|
+ case 'b':
|
|
+#ifdef SO_BROADCAST
|
|
+ bflag = 1;
|
|
+#else
|
|
+ errx(1, "no broadcast frame support available");
|
|
+#endif
|
|
+ break;
|
|
case 'U':
|
|
family = AF_UNIX;
|
|
break;
|
|
@@ -1907,6 +1915,15 @@ set_common_sockopts(int s, int af)
|
|
{
|
|
int x = 1;
|
|
|
|
+#ifdef SO_BROADCAST
|
|
+ if (bflag) {
|
|
+ /* allow datagram sockets to send packets to a broadcast address
|
|
+ * (this option has no effect on stream-oriented sockets) */
|
|
+ if (setsockopt(s, SOL_SOCKET, SO_BROADCAST,
|
|
+ &x, sizeof(x)) == -1)
|
|
+ err(1, NULL);
|
|
+ }
|
|
+#endif
|
|
#ifdef TCP_MD5SIG
|
|
if (Sflag) {
|
|
if (setsockopt(s, IPPROTO_TCP, TCP_MD5SIG,
|
|
@@ -2185,6 +2202,7 @@ help(void)
|
|
fprintf(stderr, "\tCommand Summary:\n\
|
|
\t-4 Use IPv4\n\
|
|
\t-6 Use IPv6\n\
|
|
+ \t-b Allow broadcast\n\
|
|
\t-C Send CRLF as line-ending\n\
|
|
\t-D Enable the debug socket option\n\
|
|
\t-d Detach from stdin\n\
|