作者itoc, 信區: itoc
標題[功能] 利用 BBSNet 來達成連一個 IP 可以選多個站
時間05/12/10
作者: itoc (核心動力) 看板: itoc
標題: Re: [問題] 關於 BBSNET.C
時間: 2005/12/08 Thu 20:47:10 Updated: 2005/12/09
※ 引述《roga (任性)》之銘言:
> 小弟要在同一台機器上面架兩個 BBS ,
> 想讓使用者透過 port 23 連上後,
> 再讓他選擇他要連這台機器上的哪個 BBS 。
> 所以有辦法把這個功能做在主 BBS 的開頭畫面,然後讓使用者自由選擇
> 要連到 第二個 BBS 或者是直接進入主 BBS 。
要在同一台主機上,架二個 BBS 站,請參考精華區
[安裝] 一台主機架二個 BBS 站
以下,所謂
「本站」指的是開在 port 23 的那個站
「二號站」、「三號站」指的是架在同一台機器上,但開在不同 port 的那些站
: 本站要加入 BBSNet 的功能
請參考精華區
[網路] bbsnet.c BBS-Net
: 改本站的 bbsnet.c
新增一個 x_bbsnet2() 在 x_bbsnet() 後面
內容照抄 x_bbsnet()
: 改本站的 bbsnet.c:x_bbsnet2()
int
x_bbsnet2()
{
int fd, i, j;
- char buf[80];
+ char buf[256];
...
...
- cutmp->status |= STATUS_REJECT; /* bbsnet 時不收熱訊 */
- while (1)
- {
...
...
else
{
- break;
+ return 0;
}
vs_bar("環島旅行");
...
...
vget(b_lines, 0, "請選擇一個連線站台:[Q] ", buf, 3, DOECHO);
i = atoi(buf) - 1;
- if (i >= 0 && i < j)
+ if (i == 0)
+ {
+ return 0;
+ }
+ else if (i >= 1 && i < j)
{
- sprintf(buf, "%s %s enter %s", cuser.userid, Now(), connlist[i].name);
+ sprintf(buf, "%s %s enter %s", fromhost, Now(), connlist[i].name);
blog("BBSNET", buf);
telnet(connlist[i].host, connlist[i].port);
- sprintf(buf, "%s %s leave %s", cuser.userid, Now(), connlist[i].name);
+ sprintf(buf, "%s %s leave %s", fromhost, Now(), connlist[i].name);
blog("BBSNET", buf);
}
- else
- {
- break;
- }
- }
- cutmp->status ^= STATUS_REJECT;
- return 0;
+ abort_bbs();
}
: 改本站的 bbsd.c:tn_main()
static inline void
tn_main()
{
clear();
#ifdef HAVE_LOGIN_DENIED
if (acl_has(BBS_ACLFILE, "", fromhost))
login_abort("\n貴機器於不被敝站接受");
#endif
+ DL_func("bin/bbsnet.so:x_bbsnet2");
: 改本站的 etc/connlist
: 第一行寫本站
: 第二行寫二號站
: 第二行寫三號站 (如果有的話)
: 範例
xx.yy.zz:23:本站的站名
xx.yy.zz:3456:二號站的站名
xx.yy.zz:4567:三號站的站名
> 然後,使用者的 IP 還是一樣是原本上站的 IP
> 不會變成提供 bbsnet 的主機的 IP ,這樣有辦法達成嗎?
以上作法
連本站會是使用者來源 IP
連二號站、三號站的來源都會變成主機 IP
若希望連二號站、三號站的來源都是使用者來源 IP 的話
則還要做以下 (以下這方法是賤招 :p)
使用以下這方法,必須要二號站、三號站和本站在同一台機器上
: 改本站的 bbsnet.c:x_bbsnet2()
else if (i >= 1 && i < j)
{
+ while (1)
+ {
+ if (dashf("/tmp/bbsnet"))
+ {
+ usleep(500000);
+ continue;
+ }
+ if ((fd = open("/tmp/bbsnet",
+ O_WRONLY | O_CREAT | O_APPEND, 0666)) >= 0)
+ {
+ write(fd, fromhost, strlen(fromhost));
+ close(fd);
+ }
+ }
sprintf(buf, "%s %s enter %s", fromhost, Now(), connlist[i].name);
blog("BBSNET", buf);
telnet(connlist[i].host, connlist[i].port);
sprintf(buf, "%s %s leave %s", fromhost, Now(), connlist[i].name);
blog("BBSNET", buf);
}
: 改 二號站、三號站的 bbsd.c:main()
dns_name((char *) &sin.sin_addr, fromhost);
+ if (!strcmp(fromhost, "xx.yy.zz")) /* 其中 xx.yy.zz 是本站的 fqdn */
+ {
+ if (dashf("/tmp/bbsnet"))
+ {
+ FILE *fp;
+ if (fp = fopen("/tmp/bbsnet", "r"))
+ {
+ char buf[128];
+ if (fgets(buf, sizeof(buf), fp))
+ str_ncpy(fromhost, buf, sizeof(fromhost));
+ fclose(fp);
+ }
+ unlink("/tmp/bbsnet");
+ }
+ }
--
=[﹎:�摃�◣��:﹎ Origin ]|[ �吨O�痐� cpu.tfcis.org ]|[�搟說�﹎:]=
=[﹊:�摃�╱��:﹊ Author ]|[ pc512-1.ee.nctu.edu.tw ]|[���插�﹊:]=精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻