Search code examples
javaregexnetwork-programmingtcpdump

TCPdump parsing sequence number using regular expressions


I am creating a program to read a packet from TCPdump, and read the sequence number. I am using regular expressions, but my code isn't working.

public long getsequencenumber(String Packet){
    Pattern P = Pattern.compile("seq.\\d*"); 
    Matcher m = P.matcher(Packet);
    if(m.matches()){
        Pattern num = Pattern.compile("\\d*");
        return Long.getLong(num.matcher(m.group()).group());
    }
    return -1;
}

The following prints -1:

System.out.print(getsequencenumber("BlahBdds seq 1910428391283 ldskgj"));

Any suggestions? Thanks!


Solution

  • What you need is matcher.find() and Long.valueOf():

    public class Main {
        public static void main(String[] args) {
            System.out.println(getsequencenumber("Bladds seq 1910428391283 ldskgj"));
        }
    
        public static long getsequencenumber(String Packet){
            Pattern P = Pattern.compile("seq.(\\d*)"); 
            Matcher m = P.matcher(Packet);
            if(m.find()){
                return Long.valueOf(m.group(1));
            }
            return -1;
        }
    }
    

    Output:

    1910428391283
    

    See demo here.