1717
1818//! FTP parser and application layer module.
1919
20- use nom7 :: bytes:: complete:: { tag, take_until} ;
21- use nom7 :: character:: complete:: { digit1, multispace0} ;
22- use nom7 :: combinator:: { complete, map_res, opt, verify} ;
23- use nom7 :: sequence:: { delimited, tuple } ;
24- use nom7 :: { Err , IResult } ;
20+ use nom8 :: bytes:: complete:: { tag, take_until} ;
21+ use nom8 :: character:: complete:: { digit1, multispace0} ;
22+ use nom8 :: combinator:: { complete, map_res, opt, verify} ;
23+ use nom8 :: sequence:: delimited;
24+ use nom8 :: { Err , IResult , Parser } ;
2525use std;
2626use std:: str;
2727use std:: str:: FromStr ;
@@ -39,38 +39,38 @@ fn getu16(i: &[u8]) -> IResult<&[u8], u16> {
3939 map_res (
4040 map_res ( delimited ( multispace0, digit1, multispace0) , str:: from_utf8) ,
4141 FromStr :: from_str,
42- ) ( i)
42+ ) . parse ( i)
4343}
4444
4545fn parse_u16 ( i : & [ u8 ] ) -> IResult < & [ u8 ] , u16 > {
46- map_res ( map_res ( digit1, str:: from_utf8) , u16:: from_str) ( i)
46+ map_res ( map_res ( digit1, str:: from_utf8) , u16:: from_str) . parse ( i)
4747}
4848
4949// PORT 192,168,0,13,234,10
5050fn ftp_active_port ( i : & [ u8 ] ) -> IResult < & [ u8 ] , u16 > {
51- let ( i, _) = tag ( "PORT" ) ( i) ?;
52- let ( i, _) = delimited ( multispace0, digit1, multispace0) ( i) ?;
53- let ( i, _) = tuple ( (
51+ let ( i, _) = tag ( "PORT" ) . parse ( i) ?;
52+ let ( i, _) = delimited ( multispace0, digit1, multispace0) . parse ( i) ?;
53+ let ( i, _) = (
5454 tag ( "," ) ,
5555 digit1,
5656 tag ( "," ) ,
5757 digit1,
5858 tag ( "," ) ,
5959 digit1,
6060 tag ( "," ) ,
61- ) ) ( i) ?;
62- let ( i, part1) = verify ( parse_u16, |& v| v <= u8:: MAX as u16 ) ( i) ?;
63- let ( i, _) = tag ( "," ) ( i) ?;
64- let ( i, part2) = verify ( parse_u16, |& v| v <= u8:: MAX as u16 ) ( i) ?;
61+ ) . parse ( i) ?;
62+ let ( i, part1) = verify ( parse_u16, |& v| v <= u8:: MAX as u16 ) . parse ( i) ?;
63+ let ( i, _) = tag ( "," ) . parse ( i) ?;
64+ let ( i, part2) = verify ( parse_u16, |& v| v <= u8:: MAX as u16 ) . parse ( i) ?;
6565 Ok ( ( i, part1 * 256 + part2) )
6666}
6767
6868// 227 Entering Passive Mode (212,27,32,66,221,243).
6969fn ftp_pasv_response ( i : & [ u8 ] ) -> IResult < & [ u8 ] , u16 > {
70- let ( i, _) = tag ( "227" ) ( i) ?;
71- let ( i, _) = take_until ( "(" ) ( i) ?;
72- let ( i, _) = tag ( "(" ) ( i) ?;
73- let ( i, _) = tuple ( (
70+ let ( i, _) = tag ( "227" ) . parse ( i) ?;
71+ let ( i, _) = take_until ( "(" ) . parse ( i) ?;
72+ let ( i, _) = tag ( "(" ) . parse ( i) ?;
73+ let ( i, _) = (
7474 digit1,
7575 tag ( "," ) ,
7676 digit1,
@@ -79,13 +79,13 @@ fn ftp_pasv_response(i: &[u8]) -> IResult<&[u8], u16> {
7979 tag ( "," ) ,
8080 digit1,
8181 tag ( "," ) ,
82- ) ) ( i) ?;
83- let ( i, part1) = verify ( getu16, |& v| v <= u8:: MAX as u16 ) ( i) ?;
84- let ( i, _) = tag ( "," ) ( i) ?;
85- let ( i, part2) = verify ( getu16, |& v| v <= u8:: MAX as u16 ) ( i) ?;
82+ ) . parse ( i) ?;
83+ let ( i, part1) = verify ( getu16, |& v| v <= u8:: MAX as u16 ) . parse ( i) ?;
84+ let ( i, _) = tag ( "," ) . parse ( i) ?;
85+ let ( i, part2) = verify ( getu16, |& v| v <= u8:: MAX as u16 ) . parse ( i) ?;
8686 // may also be completed by a final point
87- let ( i, _) = tag ( ")" ) ( i) ?;
88- let ( i, _) = opt ( complete ( tag ( "." ) ) ) ( i) ?;
87+ let ( i, _) = tag ( ")" ) . parse ( i) ?;
88+ let ( i, _) = opt ( complete ( tag ( "." ) ) ) . parse ( i) ?;
8989 Ok ( ( i, part1 * 256 + part2) )
9090}
9191
@@ -131,26 +131,26 @@ pub unsafe extern "C" fn SCFTPParsePortPasv(input: *const u8, len: u32) -> u16 {
131131
132132// 229 Entering Extended Passive Mode (|||48758|).
133133pub fn ftp_epsv_response ( i : & [ u8 ] ) -> IResult < & [ u8 ] , u16 > {
134- let ( i, _) = tag ( "229" ) ( i) ?;
135- let ( i, _) = take_until ( "|||" ) ( i) ?;
136- let ( i, _) = tag ( "|||" ) ( i) ?;
134+ let ( i, _) = tag ( "229" ) . parse ( i) ?;
135+ let ( i, _) = take_until ( "|||" ) . parse ( i) ?;
136+ let ( i, _) = tag ( "|||" ) . parse ( i) ?;
137137 let ( i, port) = getu16 ( i) ?;
138- let ( i, _) = tag ( "|)" ) ( i) ?;
139- let ( i, _) = opt ( complete ( tag ( "." ) ) ) ( i) ?;
138+ let ( i, _) = tag ( "|)" ) . parse ( i) ?;
139+ let ( i, _) = opt ( complete ( tag ( "." ) ) ) . parse ( i) ?;
140140 Ok ( ( i, port) )
141141}
142142
143143// EPRT |2|2a01:e34:ee97:b130:8c3e:45ea:5ac6:e301|41813|
144144fn ftp_active_eprt ( i : & [ u8 ] ) -> IResult < & [ u8 ] , u16 > {
145- let ( i, _) = tag ( "EPRT" ) ( i) ?;
146- let ( i, _) = take_until ( "|" ) ( i) ?;
147- let ( i, _) = tag ( "|" ) ( i) ?;
148- let ( i, _) = take_until ( "|" ) ( i) ?;
149- let ( i, _) = tag ( "|" ) ( i) ?;
150- let ( i, _) = take_until ( "|" ) ( i) ?;
151- let ( i, _) = tag ( "|" ) ( i) ?;
145+ let ( i, _) = tag ( "EPRT" ) . parse ( i) ?;
146+ let ( i, _) = take_until ( "|" ) . parse ( i) ?;
147+ let ( i, _) = tag ( "|" ) . parse ( i) ?;
148+ let ( i, _) = take_until ( "|" ) . parse ( i) ?;
149+ let ( i, _) = tag ( "|" ) . parse ( i) ?;
150+ let ( i, _) = take_until ( "|" ) . parse ( i) ?;
151+ let ( i, _) = tag ( "|" ) . parse ( i) ?;
152152 let ( i, port) = getu16 ( i) ?;
153- let ( i, _) = tag ( "|" ) ( i) ?;
153+ let ( i, _) = tag ( "|" ) . parse ( i) ?;
154154 Ok ( ( i, port) )
155155}
156156
0 commit comments