hello,
I fixed the problem. I wasn't converting it to network byte order, so the port 
wasn't displaying.
there won't be anything after that because I applied a filter on port 22, unles 
your using ssh.

  ----- Original Message ----- 
  From: John Matthews 
  To: [email protected] 
  Sent: Thursday, February 19, 2009 12:18 AM
  Subject: [c-prog] Re: help with packet tracer


  --- In [email protected], "Tyler Littlefield" <ty...@...> wrote:
  >
  > I give it -c 5. The destination and source ports aren't valid.

  I give it these arguments (running as root) and I get:

  compiling
  applying
  creating loop

  although it doesn't appear to do anything after that. Is that
  different to what you get?

  Tidied up code below.

  int main(int argc, char* argv[])
  {
  //check arg length:
  if (argc <=1)
  {
  PrintErr("You must provide an argument.");
  help(argv[0]);
  exit(EXIT_FAILURE);
  }

  char* dev = NULL; //the device pointer
  char ebuff[PCAP_ERRBUF_SIZE]; //the error buffer
  bpf_u_int32 net_addr; //the network address
  bpf_u_int32 mask_addr; //network mask.
  in_addr addr; //used for translating addresses.
  int i = 0; //used for loops.
  string temp; //our temporary string.
  int loop = 0; //how many times will we loop?
  int wait = 1; //how long should we wait?
  pcap_t* handle;
  bool stop = true; //should we continue after the arg
  parsing?
  char filter[] = "port 22"; //our default filter
  bpf_program prog; //used for applying the filter.

  //get the device name:
  if (!(dev = pcap_lookupdev(ebuff)))
  {
  PrintErr(ebuff);
  exit(EXIT_FAILURE);
  }

  //get the subnet mask and network mask:
  if ((pcap_lookupnet(dev, &net_addr, &mask_addr, ebuff)) == -1)
  {
  PrintErr(ebuff);
  exit(EXIT_FAILURE);
  }

  //loop through args:
  for (i = 1; i < argc; i++)
  {
  if ((temp = argv[i]) == "-i")
  {
  cout << "Interface: " << dev << endl; //print the
  interface name
  addr.s_addr = mask_addr;
  cout << "Network mask: " << inet_ntoa(addr) << endl;
  addr.s_addr = net_addr;
  cout << "Network address: " << inet_ntoa(addr) << endl;
  }
  else if (temp == "-v")
  {
  version(argv[0]);
  }
  else if (temp=="-c") //the number of packets to capture:
  {
  if (argc == i)
  {
  PrintErr("-c takes an argument.");
  help(argv[0]);
  exit(EXIT_FAILURE);
  }

  loop = atoi(argv[i+1]);
  stop = false;
  }
  }

  //make sure we're not needlessly continuing.
  if (stop)
  {
  exit(EXIT_SUCCESS);
  }

  //here we open the device.
  //we'll set promisc to 0 so that this can be ran on non-root systems.
  if (!(handle = pcap_open_live(dev, BUFSIZ, 0, wait, ebuff)))
  {
  PrintErr(ebuff);
  exit(EXIT_FAILURE);
  }

  //now we "compile" our filter:
  cout << "compiling" << endl;

  if (pcap_compile(handle, &prog, filter, 1, net_addr) == -1)
  {
  PrintErr("Filter compilation error!");
  exit(EXIT_FAILURE);
  }

  //now we apply the filter:
  cout << "applying" << endl;

  if (pcap_setfilter(handle, &prog) == -1)
  {
  PrintErr("Error in applying filter!");
  exit(EXIT_FAILURE);
  }

  cout << "creating loop" << endl;

  pcap_loop(handle, loop, capt_h, NULL);
  pcap_close(handle);

  return 0;
  }



  

[Non-text portions of this message have been removed]

Reply via email to