This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
guides:virtual_modem:script [2019-11-19 00:07] omolini |
guides:virtual_modem:script [2021-01-24 23:30] omolini [2.sh] |
||
---|---|---|---|
Line 17: | Line 17: | ||
# VMODEM - Virtual Modem bootstrap | # VMODEM - Virtual Modem bootstrap | ||
# -------------------------------- | # -------------------------------- | ||
- | # Oliver Molini 2019 | + | # Oliver Molini 2020 |
+ | # | ||
+ | # Billy Stoughton II for bug fixes and contributions | ||
# | # | ||
# Licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License | # Licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License | ||
# https://creativecommons.org/licenses/by-nc-sa/4.0/ | # https://creativecommons.org/licenses/by-nc-sa/4.0/ | ||
- | # | + | |
- | # Tested working out of box with the following host configurations: | + | # Tested working out of box with the following client configurations: |
# | # | ||
# o Standard VT100 terminal | # o Standard VT100 terminal | ||
Line 33: | Line 35: | ||
# - Trumpet Winsock | # - Trumpet Winsock | ||
# | # | ||
- | # o Microsoft Windows 95 | + | # o Microsoft Windows 95 OSR 2.5 + DUN 1.4 |
# - Generic | # - Generic | ||
# - Standard 28800 bps Modem | # - Standard 28800 bps Modem | ||
Line 47: | Line 49: | ||
# Script version | # Script version | ||
- | vmodver=1.4.1 | + | vmodver=1.5.1 |
# CONFIGURATION | # CONFIGURATION | ||
Line 53: | Line 55: | ||
# Variable: serport | # Variable: serport | ||
# serport specifies which local serial device to use. | # serport specifies which local serial device to use. | ||
- | # For example, using "ttyAMA0" will tell the script | + | # For example, "ttyUSB0" will tell the script to use |
- | # to use /dev/ttyAMA0 for communication. | + | # to use /dev/ttyUSB0 for communication. |
- | # | + | # Common values: ttyUSB0 or ttyAMA0 |
- | # Default: | + | |
- | # serport=ttyAMA0 | + | |
# | # | ||
- | serport=ttyAMA0 | + | serport=ttyUSB0 |
# Variable: baud | # Variable: baud | ||
Line 74: | Line 74: | ||
#baud=38400 | #baud=38400 | ||
baud=57600 | baud=57600 | ||
+ | |||
+ | # Variable: etherp | ||
+ | # Sets the name of the ethernet device for PPP connections. | ||
+ | # Usually eth0 for wired and wlan0 for wireless. | ||
+ | # | ||
+ | etherp=eth0 | ||
# Variable: echoser | # Variable: echoser | ||
Line 88: | Line 94: | ||
# Default is 1. | # Default is 1. | ||
resultverbose=1 | resultverbose=1 | ||
+ | |||
+ | # Variable: TERM | ||
+ | # Tells the script and environment which type of terminal to emulate. | ||
+ | # It is only useful to change this, if you're using a serial | ||
+ | # terminal to connect to this script. If you're connecting form a ANSI | ||
+ | # cabable machine such as DOS, you may want to use TERM="ansi" | ||
+ | # | ||
+ | TERM="vt100" | ||
# EXPORT SHELL VARS | # EXPORT SHELL VARS | ||
Line 93: | Line 107: | ||
export serport | export serport | ||
export baud | export baud | ||
+ | export etherp | ||
+ | export TERM | ||
# FUNCTIONS | # FUNCTIONS | ||
Line 111: | Line 127: | ||
echo -en "$1\x0d\x0a" >/dev/$serport | echo -en "$1\x0d\x0a" >/dev/$serport | ||
} | } | ||
+ | |||
+ | export -f sendtty | ||
+ | export -f ttyinit | ||
# Open serial port for use. Allocate file descriptor | # Open serial port for use. Allocate file descriptor | ||
Line 148: | Line 167: | ||
# | # | ||
- | # --- MODEM EMULATION --- | + | # --- HAYES EMULATION --- |
# | # | ||
if [[ $cmd == AT* ]]; then | if [[ $cmd == AT* ]]; then | ||
Line 217: | Line 236: | ||
number=`echo $seq |tr -dc '0-9'` | number=`echo $seq |tr -dc '0-9'` | ||
if [ ! -z "$number" ]; then | if [ ! -z "$number" ]; then | ||
- | if [[ $resultverbose == 1 ]]; then sendtty "RINGING"; fi | + | if [[ $resultverbose == 1 ]]; then sendtty "RINGING"; sleep 1; fi |
if [ -f "$number.sh" ]; then | if [ -f "$number.sh" ]; then | ||
if [[ $resultverbose == 1 ]]; then sendtty "CONNECT $baud"; else sendtty "1"; fi | if [[ $resultverbose == 1 ]]; then sendtty "CONNECT $baud"; else sendtty "1"; fi | ||
- | # Close serial port | ||
- | exec 99>&- | ||
# Execute dialed script | # Execute dialed script | ||
- | /sbin/getty -8 -L $serport $baud vt100 -n -l "./$number.sh" | + | /sbin/getty -8 -L $serport $baud $TERM -n -l "./$number.sh" |
# Reset serial settings | # Reset serial settings | ||
ttyinit | ttyinit | ||
- | # Reopen serial port | ||
- | exec 99<>/dev/$serport | ||
result=3 | result=3 | ||
else | else | ||
Line 278: | Line 293: | ||
if [[ $cmd == LOGIN ]]; then | if [[ $cmd == LOGIN ]]; then | ||
exec 99>&- | exec 99>&- | ||
- | /sbin/getty -8 -L ttyAMA0 $baud vt100 | + | /sbin/getty -8 -L $serport $baud $TERM |
ttyinit | ttyinit | ||
exec 99<>/dev/$serport | exec 99<>/dev/$serport | ||
Line 307: | Line 322: | ||
When Trumpet Winsock is in PPP mode, by default it will expect the following output after dialing the ISP's number and establishing a connection: | When Trumpet Winsock is in PPP mode, by default it will expect the following output after dialing the ISP's number and establishing a connection: | ||
- | * A username prompt, matched by the text "sername:" | + | * A username prompt, matched by Trumpet with the text "sername:" |
- | * A password prompt, matched by the text "ssword:" | + | * A password prompt, matched by Trumpet with the text "ssword:" |
- | * A command prompt, matched by the text ">" | + | * A command prompt, matched by Trumpet with the character ">" |
This script has been tested with the default installation of Trumpet Winsock 3.0 revision D with PPP mode switched on. This script has also been tested with the default dial-up utility of Windows 95 and Windows 98 with PPP enabled. | This script has been tested with the default installation of Trumpet Winsock 3.0 revision D with PPP mode switched on. This script has also been tested with the default dial-up utility of Windows 95 and Windows 98 with PPP enabled. | ||
Line 318: | Line 333: | ||
#!/bin/bash | #!/bin/bash | ||
# RUN PPPD DAEMON | # RUN PPPD DAEMON | ||
+ | # | ||
+ | # Oliver Molini 2020 | ||
+ | # | ||
+ | # Billy Stoughton II for bug fixes and contributions | ||
+ | # | ||
+ | # Licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License | ||
+ | # https://creativecommons.org/licenses/by-nc-sa/4.0/ | ||
# | # | ||
# Note on PPPD settings: | # Note on PPPD settings: | ||
Line 323: | Line 345: | ||
# - Make sure DNS servers are defined (add ms-dns 1.2.3.4 twice) | # - Make sure DNS servers are defined (add ms-dns 1.2.3.4 twice) | ||
# | # | ||
+ | |||
+ | # Variable: etherp | ||
+ | # Override the ethernet device to use to connect to your network. | ||
+ | # This is set in vmodem.sh, but can be overridden here. | ||
+ | # | ||
+ | # Default: #etherp=eth0 (commented out) | ||
+ | #etherp=eth0 | ||
+ | |||
# Variable: lcpidle | # Variable: lcpidle | ||
# Specifies the idle timeout period in seconds for lcp-echo-interval. | # Specifies the idle timeout period in seconds for lcp-echo-interval. | ||
Line 329: | Line 359: | ||
# | # | ||
# Default: lcpidle=5 | # Default: lcpidle=5 | ||
- | # | ||
lcpidle=5 | lcpidle=5 | ||
Line 350: | Line 379: | ||
# Share eth0 over ppp0 | # Share eth0 over ppp0 | ||
- | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | + | iptables -t nat -A POSTROUTING -o $etherp -j MASQUERADE |
- | iptables -t filter -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT | + | iptables -t filter -A FORWARD -i ppp0 -o $etherp -m state --state RELATED,ESTABLISHED -j ACCEPT |
- | iptables -t filter -A FORWARD -i eth0 -o ppp0 -j ACCEPT | + | iptables -t filter -A FORWARD -i $etherp -o ppp0 -j ACCEPT |
# Run PPP daemon and establish a link. | # Run PPP daemon and establish a link. | ||
Line 377: | Line 406: | ||
echo | echo | ||
echo "Please enter your name: " | echo "Please enter your name: " | ||
- | read username | + | read -e -p "User? " username |
echo | echo | ||
echo "Hello, $username!" | echo "Hello, $username!" | ||
Line 383: | Line 412: | ||
echo "Thank you for visiting! Bye!" | echo "Thank you for visiting! Bye!" | ||
sleep 2 | sleep 2 | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ===== 3.sh ===== | ||
+ | This example script allows VT100 compatible terminal access to the web by way of running lynx as soon as the number "3" is dialed with "ATD3". It demonstrates how to add a Linux based web browser for simple terminals. | ||
+ | |||
+ | <code bash 3.sh> | ||
+ | #!/bin/bash | ||
+ | # | ||
+ | sendtty "Terminal type set to $TERM. Running Lynx ..." | ||
+ | lynx | ||
</code> | </code> | ||