# EXTRACT IP ADDRESSES AND DOMAINS FROM EMAIL MESSAGE BODY
#
# This section extracts the IP addresses, hosts domains found in the
# message body of this email, information that later recipes use.
#
# First, declare your variables.

FIRSTBODYDOMAIN='example.com'
FIRSTBODYHOST='host.example.com'
FIRSTBODYHOSTIP='000.000.000.000'
FIRSTBODYHOSTREVIP='000.000.000.000'
FIRSTBODYIP='000.000.000.000'
FIRSTBODYREVIP='000.000.000.000'
SECONDBODYDOMAIN='example.com'
SECONDBODYHOST='host.example.com'
SECONDBODYHOSTIP='000.000.000.000'
SECONDBODYHOSTREVIP='000.000.000.000'
SECONDBODYIP='000.000.000.000'
SECONDBODYREVIP='000.000.000.000'
THIRDBODYDOMAIN='example.com'
THIRDBODYHOST='host.example.com'
THIRDBODYHOSTIP='000.000.000.000'
THIRDBODYHOSTREVIP='000.000.000.000'
THIRDBODYIP='000.000.000.000'
THIRDBODYREVIP='000.000.000.000'
FOURTHBODYDOMAIN='example.com'
FOURTHBODYHOST='host.example.com'
FOURTHBODYHOSTIP='000.000.000.000'
FOURTHBODYHOSTREVIP='000.000.000.000'
FOURTHBODYIP='000.000.000.000'
FOURTHBODYREVIP='000.000.000.000'
FIFTHBODYDOMAIN='example.com'
FIFTHBODYHOST='host.example.com'
FIFTHBODYHOSTIP='000.000.000.000'
FIFTHBODYHOSTREVIP='000.000.000.000'
FIFTHBODYIP='000.000.000.000'
FIFTHBODYREVIP='000.000.000.000'
SIXTHBODYDOMAIN='example.com'
SIXTHBODYHOST='host.example.com'
SIXTHBODYHOSTIP='000.000.000.000'
SIXTHBODYHOSTREVIP='000.000.000.000'
SIXTHBODYIP='000.000.000.000'
SIXTHBODYREVIP='000.000.000.000'

#
# Now, extract the IPs and domains from the message body, and
# generate the corresponding IPs for any hosts in the message body.
#

# Get old-style .US four-part domains with city.st.us endings.
#
:0 B
* FIRSTBODYDOMAIN ?? example\.com
* (^|[^-_0-9a-z])\/[0-9a-z][-_0-9a-z]+(|\.|=2E)[0-9a-z][-_0-9a-z]+(|\.|=2E)\
                   [0-9a-z][0-9a-z](|\.|=2E)us([^a-z0-9.@=]|$)
{
 :0
 { STRING=${MATCH} }

 :0
 { FIRSTBODYDOMAIN=`${ECHO} "${STRING}" | ${SED} -e 's/[^A-Za-z]*$//g'` }
}

# Get those .BR, .CC, and .LB domains that are two-part, leaving the
# three-parters to be extracted by the catchall recipe at the end.
#
:0 B
* FIRSTBODYDOMAIN ?? example\.com
* (^|[^-_0-9a-z])\/[0-9a-z][-_0-9a-z][-_0-9a-z][-_0-9a-z]+(|\.|=2E)\
               (br|cc|lb)([^a-z0-9.@=]|$)
{
 :0
 { STRING=${MATCH} }

 :0
 { FIRSTBODYDOMAIN=`${ECHO} "${STRING}" | ${SED} -e 's/[^A-Za-z]*$//g'` }
}

# Get those .ST domains that are two-part, leaving the three-parters to be
# extracted by the catchall recipe at the end.
#
:0 B
* FIRSTBODYDOMAIN ?? example\.com
* (^|[^-_0-9a-z])\/[0-9a-z][0-9a-z][0-9a-z]+(|\.|=2E)st([^a-z0-9.@=]|$)
{
 :0
 { STRING=${MATCH} }

 :0
 { FIRSTBODYDOMAIN=`${ECHO} "${STRING}" | ${SED} -e 's/[^A-Za-z]*$//g'` }
}

# Get two-part domains, including all non-country TLDs and those country
# TLDs that don't use second-level categories.
#
:0 B
* FIRSTBODYDOMAIN ?? example\.com
* (^|[^-_0-9a-z])\/[0-9a-z][-_0-9a-z]+(|\.|=2E)(aero|biz|ca|com|\
               coop|cz|de|edu|es|exp|fi|fm|fr|geek|gov|info|int|is|it|\
               llc|lnx|ltd|lv|med|mil|museum|name|net|nic|noc|nu|null|\
               org|porn|pro|pt|ru|se|to|tv|ws|xxx)([^a-z0-9.@=]|$)
{
 :0
 { STRING=${MATCH} }

 :0
 { FIRSTBODYDOMAIN=`${ECHO} "${STRING}" | ${SED} -e 's/[^A-Za-z]*$//g'` }
}

# Get three-part domains, all of them two-character country TLDs. I use a long
# list of actual TLDs instead of just a regular expression here to prevent false
# positives.
#
:0 B
* FIRSTBODYDOMAIN ?? example\.com
* (^|[^-_0-9a-z])\/[0-9a-z][-_0-9a-z]+(|\.|=2E)[0-9a-z][-_0-9a-z]+(|\.|=2E)(ac|\
              ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|\
              ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|\
              ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|\
              de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|fi|fj|fk|fm|fo|fr|\
              ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|\
              hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|\
              ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|\
              ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|\
              na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|\
              pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|ru|rw|\
              sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|sv|sy|sz|\
              tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|\
              ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|\
              wf|ws|ye|yt|yu|za|zm|zw)([^a-z0-9.@=]|$)
{
 :0
 { STRING=${MATCH} }

 :0
 { FIRSTBODYDOMAIN=`${ECHO} "${STRING}" | ${SED} -e 's/[^A-Za-z]*$//g'` }
}

:0 B
* FIRSTBODYHOST ?? host\.example\.com
* (^|[^-_0-9a-z.])\/([0-9a-z][-_0-9a-z]+(|\.|=2E))+(ac|\
            ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|\
            ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|\
            ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cu|cv|cx|cy|cz|\
            de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|exp|fi|fj|fk|fm|fo|fr|\
            ga|gd|ge|geek|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|\
            hk|hm|hn|hr|ht|hu|id|ie|il|im|in|info|int|io|iq|ir|is|it|je|jm|jo|jp|\
            ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|llc|lnx|lr|ls|lt|ltd|\
            lu|lv|ly|ma|mc|md|med|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|\
            museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nic|nl|no|noc|\
            np|nr|nu|null|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|porn|pr|pro|ps|\
            pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|\
            so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|\
            ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xxx|ye|yt|yu|za|\
            zm|zw)([^a-z0-9.@=]|$)
{
 :0
 { STRING=${MATCH} }

 :0
 { FIRSTBODYHOST=`${ECHO} "${STRING}" | ${SED} -e 's/[^A-Za-z]*$//g'` }
}

LOCALBUFFER=zilch

:0
* ! FIRSTBODYDOMAIN ?? (altavista\.com|\
                        aol\.com|\
                        apple\.com|\
                        att\.net|\
                        attbi\.com|\
                        cnn\.com|\
                        comcast\.net|\
                        cs\.com|\
                        earthlink\.com|\
                        example\.(com|net|org)|\
                        excite\.com|\
                        geocities\.com|\
                        google\.com|\
                        hinet\.net|\
                        hotmail\.com|\
                        macromedia\.com|\
                        microsoft\.com|\
                        mindspring\.com|\
                        msn\.com|\
                        netscape\.net|\
                        sonic\.net|\
                        terra\.es|\
                        tripod\.com|\
                        tripod\.co\.[a-z][a-z]|\
                        yahoo\.(ca|com)|\
                        yahoo\.co\.[a-z][a-z])
{ LOCALBUFFER=`${SBHOST} ${FIRSTBODYHOST} ${SBNAMESRVR}` }

:0
* ! LOCALBUFFER ?? zilch
* ! LOCALBUFFER ?? ^Host.*not found:.*$
* ! LOCALBUFFER ?? ^.*connection timed out.*$
{ FIRSTBODYHOSTIP=`${ECHO} "${LOCALBUFFER}" | ${SED} -e '/^Using domain server:$/d' -e '/^Name:/d' -e '/^Address:/d' -e '/Aliases:/d' -e '/^$/d' -e '/is an alias for/d' -e 's/^.*has address //'` }

:0
* FIRSTBODYHOSTIP ?? ^$
{ FIRSTBODYHOSTIP=000.000.000.000 }


# SECOND BODY DOMAINS/HOSTS/IPs

# Get old-style .US four-part domains with city.st.us endings.
#
:0 B
* ! FIRSTBODYDOMAIN ?? example\.com
* SECONDBODYDOMAIN ?? example\.com
* (^|[^-_0-9a-z.])([0-9a-z][-_0-9a-z]+(|\.|=2E))+(ac|\
                 ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|\
                 ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|\
                 ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cu|cv|cx|cy|cz|\
                 de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|exp|fi|fj|fk|fm|fo|fr|\
                 ga|gd|ge|geek|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|\
                 hk|hm|hn|hr|ht|hu|id|ie|il|im|in|info|int|io|iq|ir|is|it|je|jm|jo|jp|\
                 ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|llc|lnx|lr|ls|lt|ltd|\
                 lu|lv|ly|ma|mc|md|med|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|\
                 museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nic|nl|no|noc|\
                 np|nr|nu|null|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|porn|pr|pro|ps|\
                 pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|\
                 so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|\
                 ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xxx|ye|yt|yu|za|\
                 zm|zw)([^a-z0-9.@=]|$)(.*$)*.*(^|[^-_0-9a-z])\/[0-9a-z][-_0-9a-z]+\
                 (|\.|=2E)[0-9a-z][-_0-9a-z]+(|\.|=2E)\
                 [0-9a-z][0-9a-z](|\.|=2E)us([^a-z0-9.@=]|$)
{
 :0
 { STRING=${MATCH} }

 :0
 { SECONDBODYDOMAIN=`${ECHO} "${STRING}" | ${SED} -e 's/[^A-Za-z]*$//g'` }
}

# Get those .BR, .CC, and .LB domains that are two-part, leaving the
# three-parters to be extracted by the catchall recipe at the end.
#
:0 B
* ! FIRSTBODYDOMAIN ?? example\.com
* SECONDBODYDOMAIN ?? example\.com
* (^|[^-_0-9a-z.])([0-9a-z][-_0-9a-z]+(|\.|=2E))+(ac|\
                 ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|\
                 ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|\
                 ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cu|cv|cx|cy|cz|\
                 de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|exp|fi|fj|fk|fm|fo|fr|\
                 ga|gd|ge|geek|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|\
                 hk|hm|hn|hr|ht|hu|id|ie|il|im|in|info|int|io|iq|ir|is|it|je|jm|jo|jp|\
                 ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|llc|lnx|lr|ls|lt|ltd|\
                 lu|lv|ly|ma|mc|md|med|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|\
                 museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nic|nl|no|noc|\
                 np|nr|nu|null|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|porn|pr|pro|ps|\
                 pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|\
                 so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|\
                 ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xxx|ye|yt|yu|za|\
                 zm|zw)([^a-z0-9.@=]|$)(.*$)*.*\
                 (^|[^-_0-9a-z])\/[0-9a-z][-_0-9a-z][-_0-9a-z][-_0-9a-z]+(|\.|=2E)\
                 (br|cc|lb)([^a-z0-9.@=]|$)
{
 :0
 { STRING=${MATCH} }

 :0
 { SECONDBODYDOMAIN=`${ECHO} "${STRING}" | ${SED} -e 's/[^A-Za-z]*$//g'` }
}

# Get those .ST domains that are two-part, leaving the three-parters to be
# extracted by the catchall recipe at the end.
#
:0 B
* ! FIRSTBODYDOMAIN ?? example\.com
* SECONDBODYDOMAIN ?? example\.com
* (^|[^-_0-9a-z.])([0-9a-z][-_0-9a-z]+(|\.|=2E))+(ac|\
                 ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|\
                 ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|\
                 ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cu|cv|cx|cy|cz|\
                 de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|exp|fi|fj|fk|fm|fo|fr|\
                 ga|gd|ge|geek|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|\
                 hk|hm|hn|hr|ht|hu|id|ie|il|im|in|info|int|io|iq|ir|is|it|je|jm|jo|jp|\
                 ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|llc|lnx|lr|ls|lt|ltd|\
                 lu|lv|ly|ma|mc|md|med|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|\
                 museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nic|nl|no|noc|\
                 np|nr|nu|null|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|porn|pr|pro|ps|\
                 pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|\
                 so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|\
                 ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xxx|ye|yt|yu|za|\
                 zm|zw)([^a-z0-9.@=]|$)(.*$)*.*\
                 (^|[^-_0-9a-z])\/[0-9a-z][0-9a-z][0-9a-z]+(|\.|=2E)st([^a-z0-9.@=]|$)
{
 :0
 { STRING=${MATCH} }

 :0
 { SECONDBODYDOMAIN=`${ECHO} "${STRING}" | ${SED} -e 's/[^A-Za-z]*$//g'` }
}

# Get two-part domains, including all non-country TLDs and those country
# TLDs that don't use second-level categories.
#
:0 B
* ! FIRSTBODYDOMAIN ?? example\.com
* SECONDBODYDOMAIN ?? example\.com
* (^|[^-_0-9a-z.])([0-9a-z][-_0-9a-z]+(|\.|=2E))+(ac|\
                 ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|\
                 ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|\
                 ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cu|cv|cx|cy|cz|\
                 de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|exp|fi|fj|fk|fm|fo|fr|\
                 ga|gd|ge|geek|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|\
                 hk|hm|hn|hr|ht|hu|id|ie|il|im|in|info|int|io|iq|ir|is|it|je|jm|jo|jp|\
                 ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|llc|lnx|lr|ls|lt|ltd|\
                 lu|lv|ly|ma|mc|md|med|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|\
                 museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nic|nl|no|noc|\
                 np|nr|nu|null|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|porn|pr|pro|ps|\
                 pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|\
                 so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|\
                 ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xxx|ye|yt|yu|za|\
                 zm|zw)([^a-z0-9.@=]|$)(.*$)*.*\
                 (^|[^-_0-9a-z])\/[0-9a-z][-_0-9a-z]+(|\.|=2E)(aero|biz|ca|\
                 com|coop|cz|de|edu|es|exp|fi|fm|fr|geek|gov|info|int|is|it|\
                 llc|lnx|ltd|lv|med|mil|museum|name|net|nic|noc|nu|null|\
                 org|porn|pro|pt|ru|se|to|tv|ws|xxx)([^a-z0-9.@=]|$)
{
 :0
 { STRING=${MATCH} }

 :0
 { SECONDBODYDOMAIN=`${ECHO} "${STRING}" | ${SED} -e 's/[^A-Za-z]*$//g'` }
}

# Get three-part domains, all of them two-character country TLDs. I use a long
# list of actual TLDs instead of just a regular expression here to prevent false
# positives.
#
:0 B
* ! FIRSTBODYDOMAIN ?? example\.com
* SECONDBODYDOMAIN ?? example\.com
* (^|[^-_0-9a-z.])([0-9a-z][-_0-9a-z]+(|\.|=2E))+(ac|\
                 ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|\
                 ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|\
                 ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cu|cv|cx|cy|cz|\
                 de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|exp|fi|fj|fk|fm|fo|fr|\
                 ga|gd|ge|geek|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|\
                 hk|hm|hn|hr|ht|hu|id|ie|il|im|in|info|int|io|iq|ir|is|it|je|jm|jo|jp|\
                 ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|llc|lnx|lr|ls|lt|ltd|\
                 lu|lv|ly|ma|mc|md|med|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|\
                 museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nic|nl|no|noc|\
                 np|nr|nu|null|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|porn|pr|pro|ps|\
                 pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|\
                 so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|\
                 ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xxx|ye|yt|yu|za|\
                 zm|zw)([^a-z0-9.@=]|$)(.*$)*.*\
                 (^|[^-_0-9a-z])\/[0-9a-z][-_0-9a-z]+(|\.|=2E)[0-9a-z][-_0-9a-z]+\
                 (|\.|=2E)(ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|\
                 ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|\
                 ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|\
                 de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|fi|fj|fk|fm|fo|fr|\
                 ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|\
                 hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|\
                 ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|\
                 ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|\
                 na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|\
                 pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|ru|rw|\
                 sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|sv|sy|sz|\
                 tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|\
                 ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|\
                 wf|ws|ye|yt|yu|za|zm|zw)([^a-z0-9.@=]|$)
{
 :0
 { STRING=${MATCH} }

 :0
 { SECONDBODYDOMAIN=`${ECHO} "${STRING}" | ${SED} -e 's/[^A-Za-z]*$//g'` }
}

# SECONDBODYHOST
:0 B
* ! FIRSTBODYHOST ?? host\.example\.com
* SECONDBODYHOST ?? host\.example\.com
* (^|[^-_0-9a-z.])([0-9a-z][-_0-9a-z]+(|\.|=2E))+(ac|\
          ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|\
          ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|\
          ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cu|cv|cx|cy|cz|\
          de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|exp|fi|fj|fk|fm|fo|fr|\
          ga|gd|ge|geek|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|\
          hk|hm|hn|hr|ht|hu|id|ie|il|im|in|info|int|io|iq|ir|is|it|je|jm|jo|jp|\
          ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|llc|lnx|lr|ls|lt|ltd|\
          lu|lv|ly|ma|mc|md|med|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|\
          museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nic|nl|no|noc|\
          np|nr|nu|null|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|porn|pr|pro|ps|\
          pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|\
          so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|\
          ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xxx|ye|yt|yu|za|\
          zm|zw)([^a-z0-9.@=]|$)\
          (.*$)*.*(^|[^-_0-9a-z])\/([0-9a-z][-_0-9a-z]+(|\.|=2E))+(ac|\
          ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|\
          ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|\
          ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cu|cv|cx|cy|cz|\
          de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|exp|fi|fj|fk|fm|fo|fr|\
          ga|gd|ge|geek|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|\
          hk|hm|hn|hr|ht|hu|id|ie|il|im|in|info|int|io|iq|ir|is|it|je|jm|jo|jp|\
          ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|llc|lnx|lr|ls|lt|ltd|\
          lu|lv|ly|ma|mc|md|med|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|\
          museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nic|nl|no|noc|\
          np|nr|nu|null|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|porn|pr|pro|ps|\
          pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|\
          so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|\
          ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xxx|ye|yt|yu|za|\
          zm|zw)([^a-z0-9.@=]|$)
{
 :0
 { STRING=${MATCH} }

 :0
 { SECONDBODYHOST=`${ECHO} "${STRING}" | ${SED} -e 's/[^A-Za-z]*$//g'` }
}

:0
* $ SECONDBODYHOST ?? ${FIRSTBODYHOST}
{ SECONDBODYHOSTIP=${FIRSTBODYHOSTIP} }

LOCALBUFFER=zilch

:0
* ! SECONDBODYDOMAIN ?? (altavista\.com|\
                        aol\.com|\
                        apple\.com|\
                        att\.net|\
                        attbi\.com|\
                        cnn\.com|\
                        comcast\.net|\
                        cs\.com|\
                        earthlink\.com|\
                        example\.(com|net|org)|\
                        excite\.com|\
                        geocities\.com|\
                        google\.com|\
                        hinet\.net|\
                        hotmail\.com|\
                        macromedia\.com|\
                        microsoft\.com|\
                        mindspring\.com|\
                        msn\.com|\
                        netscape\.net|\
                        sonic\.net|\
                        terra\.es|\
                        tripod\.com|\
                        tripod\.co\.[a-z][a-z]|\
                        yahoo\.(ca|com)|\
                        yahoo\.co\.[a-z][a-z])
{ LOCALBUFFER=`${SBHOST} ${SECONDBODYHOST} ${SBNAMESRVR}` }

:0
* ! LOCALBUFFER ?? zilch
* ! LOCALBUFFER ?? ^Host.*not found:.*$
* ! LOCALBUFFER ?? ^.*connection timed out.*$
* ! LOCALBUFFER ?? ^.*is an alias for.*$
{ SECONDBODYHOSTIP=`${ECHO} "${LOCALBUFFER}" | ${SED} -e '/^Using domain server:$/d' -e '/^Name:/d' -e '/^Address:/d' -e '/Aliases:/d' -e '/^$/d' -e '/is an alias for/d' -e 's/^.*has address //g'` }

:0
* SECONDBODYHOSTIP ?? ^$
{ SECONDBODYHOSTIP=000.000.000.000 }
