|
|
|
|
@ -1,4 +1,4 @@
|
|
|
|
|
/* Copyright (C) 2017-2021 Open Information Security Foundation
|
|
|
|
|
/* Copyright (C) 2017-2025 Open Information Security Foundation
|
|
|
|
|
*
|
|
|
|
|
* You can copy, redistribute or modify this Program under the terms of
|
|
|
|
|
* the GNU General Public License version 2 as published by the Free
|
|
|
|
|
@ -19,10 +19,11 @@
|
|
|
|
|
|
|
|
|
|
use std::str;
|
|
|
|
|
use std;
|
|
|
|
|
use nom7::IResult;
|
|
|
|
|
use nom7::combinator::map_res;
|
|
|
|
|
use nom7::bytes::streaming::{tag, take_while};
|
|
|
|
|
use nom7::number::streaming::be_u8;
|
|
|
|
|
use nom8::IResult;
|
|
|
|
|
use nom8::Parser;
|
|
|
|
|
use nom8::combinator::map_res;
|
|
|
|
|
use nom8::bytes::streaming::{tag, take_while};
|
|
|
|
|
use nom8::number::streaming::be_u8;
|
|
|
|
|
|
|
|
|
|
use crate::applayer::{AppLayerTxData,AppLayerStateData};
|
|
|
|
|
|
|
|
|
|
@ -122,14 +123,14 @@ fn getstr(i: &[u8]) -> IResult<&[u8], &str> {
|
|
|
|
|
map_res(
|
|
|
|
|
take_while(|c| c != 0),
|
|
|
|
|
str::from_utf8
|
|
|
|
|
)(i)
|
|
|
|
|
).parse(i)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn tftp_request(slice: &[u8]) -> IResult<&[u8], TFTPTransaction> {
|
|
|
|
|
let (i, _) = tag([0])(slice)?;
|
|
|
|
|
let (i, opcode) = be_u8(i)?;
|
|
|
|
|
let (i, _) = tag(&[0u8][..]).parse(slice)?;
|
|
|
|
|
let (i, opcode) = be_u8.parse(i)?;
|
|
|
|
|
let (i, filename) = getstr(i)?;
|
|
|
|
|
let (i, _) = tag([0])(i)?;
|
|
|
|
|
let (i, _) = tag(&[0u8][..]).parse(i)?;
|
|
|
|
|
let (i, mode) = getstr(i)?;
|
|
|
|
|
Ok((i,
|
|
|
|
|
TFTPTransaction::new(opcode, String::from(filename), String::from(mode))
|
|
|
|
|
|