|
|
- Subject: Add tcp-mss support.
- Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/net/hping/patches/
- Bug-Debian: http://bugs.debian.org/409391
- Last-Update: 2009-09-19
-
- --- a/main.c
- +++ b/main.c
- @@ -44,7 +44,8 @@ unsigned int
- signlen,
- lsr_length = 0,
- ssr_length = 0,
- - tcp_ack;
- + tcp_ack,
- + tcp_mss;
-
-
- unsigned short int
- @@ -95,6 +96,7 @@ int
- opt_tcpexitcode = FALSE,
- opt_badcksum = FALSE,
- opt_tr_keep_ttl = FALSE,
- + opt_tcp_mss = FALSE,
- opt_tcp_timestamp = FALSE,
- opt_clock_skew = FALSE,
- cs_window = DEFAULT_CS_WINDOW,
- --- a/globals.h
- +++ b/globals.h
- @@ -32,7 +32,8 @@ extern unsigned int
- tcp_seqnum,
- set_ack,
- ip_header_length,
- - tcp_ack;
- + tcp_ack,
- + tcp_mss;
-
- extern unsigned short int
- data_size;
- @@ -77,6 +78,7 @@ extern int opt_debug,
- opt_tcpexitcode,
- opt_badcksum,
- opt_tr_keep_ttl,
- + opt_tcp_mss,
- opt_tcp_timestamp,
- opt_clock_skew,
- cs_window,
- --- a/parseoptions.c
- +++ b/parseoptions.c
- @@ -31,7 +31,7 @@ enum { OPT_COUNT, OPT_INTERVAL, OPT_NUME
- OPT_RROUTE, OPT_IPPROTO, OPT_ICMP_IPVER, OPT_ICMP_IPHLEN,
- OPT_ICMP_IPLEN, OPT_ICMP_IPID, OPT_ICMP_IPPROTO, OPT_ICMP_CKSUM,
- OPT_ICMP_TS, OPT_ICMP_ADDR, OPT_TCPEXITCODE, OPT_FAST, OPT_TR_KEEP_TTL,
- - OPT_TCP_TIMESTAMP, OPT_TR_STOP, OPT_TR_NO_RTT, OPT_ICMP_HELP,
- + OPT_TCP_TIMESTAMP, OPT_TCP_MSS, OPT_TR_STOP, OPT_TR_NO_RTT, OPT_ICMP_HELP,
- OPT_RAND_DEST, OPT_RAND_SOURCE, OPT_LSRR, OPT_SSRR, OPT_ROUTE_HELP,
- OPT_ICMP_IPSRC, OPT_ICMP_IPDST, OPT_ICMP_SRCPORT, OPT_ICMP_DSTPORT,
- OPT_ICMP_GW, OPT_FORCE_ICMP, OPT_APD_SEND, OPT_SCAN, OPT_FASTER,
- @@ -125,6 +125,7 @@ static struct ago_optlist hping_optlist[
- { '\0', "force-icmp", OPT_FORCE_ICMP, AGO_NOARG },
- { '\0', "beep", OPT_BEEP, AGO_NOARG },
- { '\0', "flood", OPT_FLOOD, AGO_NOARG },
- + { '\0', "tcp-mss", OPT_TCP_MSS, AGO_NEEDARG|AGO_EXCEPT0 },
- { '\0', "clock-skew", OPT_CLOCK_SKEW, AGO_NOARG },
- { '\0', "clock-skew-win", OPT_CS_WINDOW, AGO_NEEDARG},
- { '\0', "clock-skew-win-shift", OPT_CS_WINDOW_SHIFT, AGO_NEEDARG},
- @@ -561,6 +562,10 @@ int parse_options(int argc, char **argv)
- case OPT_FLOOD:
- opt_flood = TRUE;
- break;
- + case OPT_TCP_MSS:
- + opt_tcp_mss = TRUE;
- + tcp_mss = strtoul(ago_optarg, NULL, 0);
- + break;
- case OPT_CLOCK_SKEW:
- opt_tcp_timestamp = TRUE;
- opt_clock_skew = TRUE;
- --- a/usage.c
- +++ b/usage.c
- @@ -87,6 +87,7 @@ void show_usage(void)
- " -X --xmas set X unused flag (0x40)\n"
- " -Y --ymas set Y unused flag (0x80)\n"
- " --tcpexitcode use last tcp->th_flags as exit code\n"
- +" --tcp-mss enable the TCP MSS option with the given value\n"
- " --tcp-timestamp enable the TCP timestamp option to guess the HZ/uptime\n"
- "Clock skew detection\n"
- " --clock-skew enable clock skew detection. Try with -S against open port\n"
- --- a/sendtcp.c
- +++ b/sendtcp.c
- @@ -28,10 +28,12 @@ void send_tcp(void)
- char *packet, *data;
- struct mytcphdr *tcp;
- struct pseudohdr *pseudoheader;
- - unsigned char *tstamp;
- + unsigned char *opts;
-
- + if (opt_tcp_mss)
- + tcp_opt_size += 4;
- if (opt_tcp_timestamp)
- - tcp_opt_size = 12;
- + tcp_opt_size += 12;
-
- packet_size = TCPHDR_SIZE + tcp_opt_size + data_size;
- packet = malloc(PSEUDOHDR_SIZE + packet_size);
- @@ -41,7 +43,7 @@ void send_tcp(void)
- }
- pseudoheader = (struct pseudohdr*) packet;
- tcp = (struct mytcphdr*) (packet+PSEUDOHDR_SIZE);
- - tstamp = (unsigned char*) (packet+PSEUDOHDR_SIZE+TCPHDR_SIZE);
- + opts = (unsigned char*) (packet+PSEUDOHDR_SIZE+TCPHDR_SIZE);
- data = (char*) (packet+PSEUDOHDR_SIZE+TCPHDR_SIZE+tcp_opt_size);
-
- memset(packet, 0, PSEUDOHDR_SIZE+packet_size);
- @@ -64,14 +66,24 @@ void send_tcp(void)
- tcp->th_win = htons(src_winsize);
- tcp->th_flags = tcp_th_flags;
-
- + /* tcp MSS option */
- + if (opt_tcp_mss) {
- + opts[0] = 2;
- + opts[1] = 4; /* 4 bytes, kind+len+MSS */
- + opts[2] = tcp_mss >> 8;
- + opts[3] = tcp_mss & 0xff;
- + opts += 4;
- + }
- +
- /* tcp timestamp option */
- if (opt_tcp_timestamp) {
- __u32 randts = rand() ^ (rand() << 16);
- - tstamp[0] = tstamp[1] = 1; /* NOOP */
- - tstamp[2] = 8;
- - tstamp[3] = 10; /* 10 bytes, kind+len+T1+T2 */
- - memcpy(tstamp+4, &randts, 4); /* random */
- - memset(tstamp+8, 0, 4); /* zero */
- + opts[0] = opts[1] = 1; /* NOOP */
- + opts[2] = 8;
- + opts[3] = 10; /* 10 bytes, kind+len+T1+T2 */
- + memcpy(opts+4, &randts, 4); /* random */
- + memset(opts+8, 0, 4); /* zero */
- + opts += 12;
- }
-
- /* data */
- --- a/docs/hping3.8
- +++ b/docs/hping3.8
- @@ -98,6 +98,8 @@ hping2 \- send (almost) arbitrary TCP/IP
- ] [
- .B \-\-tcpexitcode
- ] [
- +.B \-\-tcp-mss
- +] [
- .B \-\-tcp-timestamp
- ] [
- .B \-\-tr-stop
- @@ -510,6 +512,9 @@ numbers are predictable.
- .I -b --badcksum
- Send packets with a bad UDP/TCP checksum.
- .TP
- +.I --tcp-mss
- +Enable the TCP MSS option and set it to the given value.
- +.TP
- .I --tcp-timestamp
- Enable the TCP timestamp option, and try to guess the timestamp update
- frequency and the remote system uptime.
- --- a/docs/french/hping2-fr.8
- +++ b/docs/french/hping2-fr.8
- @@ -99,6 +99,8 @@ hping2 \- envoie des paquets TCP/IP (pre
- ] [
- .B \-\-tcpexitcode
- ] [
- +.B \-\-tcp-mss
- +] [
- .B \-\-tcp-timestamp
- ] [
- .B \-\-tr-stop
- @@ -538,6 +540,9 @@ pouvez le voir les num�ros de s�quence d
- .I -b --badcksum
- Envoie des paquets avec une mauvaise somme de contr�le UDP/TCP
- .TP
- +.I --tcp-mss
- +Active l'option TCP MSS et la fixe avec la valeur donn�e.
- +.TP
- .I --tcp-timestamp
- Active l'option TCP timestamp, et essaye de deviner la fr�quence de mise �
- jour du timestamp et l'uptime du syst�me distant.
|