>>4516 68user 返答ありがとうございます。 マニュアルは下記をざっと目を通してみたのですが、記載が見付けれませんでした。 http://www.infoscience.co.jp/technical/openssl/news/ http://home.att.ne.jp/theta/diatom/ 前回の書き込みで受信関係がおかしいと推測してしまいましたが、 ためしにContent-Lengthの値分だけ受信しても同じ状態なので、 現在、違う部分も検証しています。 また理解が深まりましたら報告させて頂きますm(_ _)m |
はじめまして。素朴な疑問があるので、もし知っておられたらお答えください。 一般論として、ネットワーク上ではTCPとUDPはどっちが優先度が高いのでしょうか? 輻輳した場合に生き残る確率?に違いはありますか? とにかくガンガンパケットを送りつけるプログラムで実験してみたところ、 気持ち程度UDPが優先されている気がしますが、確証が持てません。 LinuxのsocketオプションにSO_PRIORITYというのがあり、デフォルトは TCPもUDPも0でした。 setsockoptで優先度を変えてみても誤差程度の差しか認識できません。 Webで「TCP UDP 優先度」などで探してもいい資料が見つからない状態です。 何かそのあたりの情報を知っていたら教えていただけないでしょうか。 |
>>4522 むう - 一般的に、OS がどちらを優先するということは聞いたことがない。 - ただ、実装によっては得手不得手がある可能性はある。 - しかし一般的に TCP の方が高機能であり行うべき処理も多いため、 スループットという点に関しては UDP の方が有利であろう。 - 当然ながら帯域制御ができるルータ・OS であれば、どちらかを優先する ことは可能であろうが、これは設定の問題。 - SO_PRIORITY は IP の TOS (Type of Service) に設定される。 - TOS の値を改変してしまうルータがあるようで、チェックサム計算からは 除外されたりするかわいそうなフィールド。 - また、TOS は DiffServ など全く別の用途に使われたりもする。 http://x68000.q-e-d.net/~68user/rfc/?key=2474&target=title - OS が TOS を参照するかどうかは怪しいのでは? (ルータならともかく) - TOS で QoS をやりたいならイントラ内で使うこと。ルータは TOS 対応の ものを揃えるべき。 - 少なくともインターネット経由では、ピアまで TOS がそのまま流れる 保障は全くない。 - Arcstar のように、TOS を考慮するとうたっているサービスはある。 http://www.ntt-vpn.com/ip-vpn/faq/faq_02.html というのがわたしの認識です。 |
Wic-PC上で起動した際Teratermウィンドウがタスク上に隠れて しまいタスクトレイ上にある該当画面を選択しなければ画面上 に表示されません。設定で画面がフォアに表示されるように する為の設定方法をご教示下さい。 |
>>4524 かつや http://search.vector.co.jp/search?query=%8D%C5%91O%96%CA などのツールを インストールするのがよいのではないでしょうか。 |
>>4516 68user いろいろありがとうございます。お手数をおかけしました。 > " の解決のため、10年近くつぎはぎでやってきた汚い部分を全面的に見直し > たため、もしかしたら UNIX の部屋の検索部分にエンバグしている可能性が > あります。怪しい挙動を見つけられた方は教えていただけると幸いです。 自分 1 人暴走している感じで恐縮ですが、いろいろ試してしまいました。 全角記号を検索したときの挙動について。 - 半角に変換して検索されている*ものもある*。 (「@」「〜」「:」などは半角に変換されている) - ヒットしなかったときのキーワードの表示が文字化けしている。(*1) (「!」「;」「¥」など多数) - 関係ない結果が表示される。(*2) (「”」「’」「|」など) 半角記号で全文検索したときの挙動について。 - 「ある」はずなのに「ヒットしませんでした。」と言われる。 (「"」→ \"\; がないと言われる、「'」→ \&apos\; がないと言われる、など) - ヒット数表示の次の、リストの先頭に空の項目が入って、 unix-term-dic.html や pregmemo.html などの各検索対象ファイルから 関係ない部分(検索キーワードによって範囲は異なるが google_ad 関連スクリプトの <!-- の後から 先頭項目のあたり?)まで拾ってきてしまっている。 (「!」「=」「:」「@(=@)」「*」など多数) あと、「+」を検索しようとすると「500 Internal Server Error」に なりますね。何も入力しなかった場合とかもですが。 --- (*1)(*2) 記号ばかり試していましたが、普通に言葉を検索しても何か変です。 「あいうえお」→ 1 件ヒットしました。(これは実際存在したので問題ない) 「かきくけこ」→ ヒットしませんでした。(が、キーワード文字化け) 「鶴」→ ヒットしませんでした。(が、キーワード文字化け) 「亀」→ 3 件ヒットしました。(が、どれも関係ないものばかり) という感じで。 …もっとスマートに分類できたらいいんですが、収拾つかなくなってしまいました。 ごちゃごちゃに突っつくだけ突っついて申し訳ありません。 |
>>4526 mkt 言わずもがなですが、 pregmemo.html は prgmemo.html の typo です。失礼しました。 |
>>4526 mkt ずいぶんヌルい修正をしてしまい、お恥ずかしい限りです、 > - ヒットしなかったときのキーワードの表示が文字化けしている。(*1) > (「!」「;」「¥」など多数) 正規表現で検索しているため、入力された文字列は quotemeta している のですが、quotemeta すると EUC-JP の 0x80 以降も quote されてしまい、 その結果化けていました。これまでは quotemeta した後に s/\\([\x80-\xff])/$1/g; で元に戻していたのですが、前回の修正時になぜか戻す必要はないと判断 して、上記の s/// を削除していました。 > - 関係ない結果が表示される。(*2) > (「”」「’」「|」など) 全角->半角変換が甘くて、" ' | などはそもそも半角に置換していません。 調査していないので想像ですが、EUC-JP の 2バイト目 + 後続バイトに マッチしてしまったのではないかと思います。 > <!-- の後から 先頭項目のあたり?)まで拾ってきてしまっている。 > (「!」「=」「:」「@(=@)」「*」など多数) 全文検索のテストが甘かったようです。 > あと、「+」を検索しようとすると「500 Internal Server Error」に > なりますね。何も入力しなかった場合とかもですが。 空の場合は print "検索内容を指定してください。\n"; と表示するようにしていたのですが、前回の修正で Content-type ヘッダの 出力方法を変更したせいで、Content-type より前に 検索内容を指定してください。 が出力され、エラーとなっているようです。 少しずつ直していきます。ご指摘ありがとうございました。 |
>>4524 かつや Tera Term のショートカットのプロパティ中の 『実行時の大きさ』って項目はどうなっていますか? |
Cシェルでシェル変数に代入された数値として 例えば0.12が入っている場合、その変数の数値を$で 参照する時に「0.12」としてではなく、 「.12」と出力させることはできますか? ご教示頂けましたら幸いです。 |
>>4530 でたち printf(1) で何とかならないかと思って試してみましたが、どうやら無理っぽいので echo ${var:s/0././} でどうでしょうか。 |
>>4531 68user echo ${var:s/0././} を行ってみましたが Variable syntax表示で 受け付けて貰えませんでした。 ご返信頂きまして大変ありがとうございます。 |
nawkの使い方について教えて欲しいことがあります。 環境は、Solaris8、shです。 nawk '{ : FNO=sprintf("%d",substr(FNM,19)); : }' ${LIT} 上記のように、ファイル名からファイルの番号を 取得し、格納しています。 "%d"を指定して数値で取得しようとしているのですが 10以上がとれません。 9のまななのですが、どこがいけないのでしょうか。 |
最近掲示板 SPAM がひどいので、特定文字列を含む投稿を禁止するように しました。 >>4540 べた FNM の内容がわからないと何とも言えないです。 |
>>4088 tansy >>4191 無題 >>4225 mmm いまさらですが、当ページのプログラムのライセンスは、特に記述がない限り、 修正 BSD ライセンスっぽいものであることを明記しました。 http://X68000.q-e-d.net/~68user/link.html |
>>4526 mkt 一部のみですが対応しました。 http://x68000.q-e-d.net/~68user/cgi-bin/cvsweb.cgi/public_html/unix/script/pickup#rev1.24 残件は、 - 全文検索がダメダメなのを直す - EUC-JP のバイトの境界を正しく見る (「亀」は「正規表現」の「正」の 2バイト目と「規」の 1バイト目にマッチしている) - 「+」が検索できないのを直す です。忘れないよう http://x68000.q-e-d.net/~68user/bugnote/viewbug.php?projectid=1&bugid=23 に登録済ですが、もしさらなる不具合があれば掲示板にてお教えいただけると幸いです。 |
UNIX の部屋で、各 OS のマニュアルへのリンクを表示するようにしました (先頭部分)。 http://X68000.q-e-d.net/~68user/unix/pickup?find 現時点では、Linux・NetBSD・FreeBSD・HP-UX11i・Solaris10 のセクション 1,1M,8 のみです。 |
ネットワークプログラミングのページはとてもお勉強になります。 非常にありがたく利用させていただきました。感謝です。 ところで素朴な疑問なのですが、TCPでsocket生成→connectの間に bindが不要なのはなぜなのでしょう? |
Solarisで、Perlを組むのですが、参考になる本を 教えてください。 Perlの基本となることが知りたいのです。 変数の設定、判定、ループ、読み書きといったことです。 基本的なことが分かる本を教えてください。 最終的には、Perlでftpやメール送信(smtpでの)を やりたいのです。 この点に関する本も教えて欲しいのですが。 |
>>4550 タバスコ=ダ=ガマ bind(2) することはできますが、普通はしません。connect(2) に 空いているポート番号を選ばせます。 http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-3.html#ss3.6 その理由は、ピアのポート番号選択は - 21 なら SMTP - 80 なら HTTP などとサービスの選択も兼ねていますが、ローカルのポート番号は 何番でも構わないからです。 >>4551 だだ > Perlの基本となることが知りたいのです。 > 変数の設定、判定、ループ、読み書きといったことです。 > 基本的なことが分かる本を教えてください。 初心者向けの本は相性が重要ですので、本屋で手にとって立ち読みするのが よいでしょう。本屋に行くことができないなら、わたしは持っていませんが 「初めての Perl」を推薦します。 > 最終的には、Perlでftpやメール送信(smtpでの)をやりたいのです。 「Perl クックブック Volume1・2」で最終的な答えを把握した上で、 「プログラミング Perl」で基礎を固めるのがよいと思います。 |
いつも楽しんでサイトを拝見させていただいております。 今UNIX上でクライアント、サーバのネットワークプログラミングをC言語で 挑戦しているところなんですが、FTPコマンド (QUIT,USER,PASS,PWD,STAT,MKD,RMD,CDW,DEL,LIST,HELPcmd,HELP,PORT,NLST) の組み込み方がイマイチよく分りません。 以下にserverftp.cとclientftp.cのコードを貼り付けておきます。 これらのコードは正常に動いております。 大変お忙しいとは思いますが、 ご教授の程、どうぞよろしくお願い致します。 serverftp.c *********************** #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #include <netdb.h> #define SERVER_FTP_PORT 9237 // list function prototypes int receiveMsg(int s, char *buf, short bufsize, short *msgsize); int sendMessage(int s, char *buf, short size); main( int argc, char *argv[] ) { int listenSocket; int s; int status; short msgSize; printf("Starting server ftp\n"); status = svcInitServer(&listenSocket); if(status != 0) { printf("Exiting server ftp due to error\n"); exit(-1); } for(;;) { printf("waiting to accept client connection\n"); s = accept(listenSocket, NULL, NULL); if(s < 0) { perror("cannot accept connection: "); exit(-1); } int msg; short size; char recvBuffer[1024]; printf("Server connected to client, issuing recvmsg\n"); status = receiveMsg (s, recvBuffer, 1024, &msgSize); if (status < 0) { close(s); return(status); } char replyMsg[1024]; strcpy(replyMsg, "200 command ok\n"); size = strlen (replyMsg) + 1; status = sendMessage(s, replyMsg, size); if(status < 0) { close(s); return(s); } } close(listenSocket); printf("Exiting from server ftp main\n"); } int svcInitServer( int *s ) { int sock; struct sockaddr_in svcAddr; int qlen; if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("cannot create socket "); return(-1); } memset((char *) &svcAddr, 0, sizeof(svcAddr)); svcAddr.sin_family = AF_INET; svcAddr.sin_addr.s_addr = htonl(INADDR_ANY); svcAddr.sin_port = htons(SERVER_FTP_PORT); if(bind(sock,(struct sockaddr *)&svcAddr, sizeof(svcAddr)) < 0) { perror("cannot bind "); close(sock); return(-1); } qlen = 1; listen(sock, qlen); *s = sock; return(0); } int sendMessage( int s, char *msg, short msgSize ) { int i; for(i = 0; i < msgSize; i++) { printf("%c", msg[i]); } printf(" \n"); if((send(s, msg, msgSize, 0)) < 0) { perror("unable to send "); return(-1); } return(0); } int receiveMsg( int s, char *buffer, short bufferSize, short *msgSize ) { int i; *msgSize = recv(s, buffer, bufferSize, 0); if(*msgSize < 0) { perror("unable to receive"); return(-1); } for(i = 0; i < *msgSize; i++) { printf("%c", buffer[i]); } printf("\n"); return(0); } clientftp.c ********************** #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #include <netdb.h> #define SERVER_FTP_PORT 9237 int sendMessage(int s, char *msg, short msgSize); int receiveMsg(int s, char *buffer, short bufferSize, short *msgSize); int main( int argc, char *argv[] ) { int status; int s; short msgSize; char FTPcmd[1024]; char replyMsg[1024]; printf("Trying to connect to server FTP\n"); status = clntConnect("//IPアドレス", &s); if(status < 0) { return(status); } printf("Connected to ftp server\n"); strcpy(FTPcmd, "quit"); status = sendMessage(s, FTPcmd, strlen(FTPcmd) + 1); if(status < 0) { close(s); return(s); } printf("Issuing receivemsg to get reply msg from server\n"); status = receiveMsg(s, replyMsg, 1024, &msgSize); if(status < 0) { close(s); return(s); } printf("%c", replyMsg); close(s); return(0); } int sendMessage(int s, char *msg, short msgSize) { int i; for(i = 0; i < msgSize; i++) { printf("%c", msg[i]); } printf(" \n"); if((send(s, msg, msgSize, 0)) < 0) { perror("unable to send "); return(-1); } return(0); } int receiveMsg(int s, char *buffer, short bufferSize, short *msgSize) { int i; *msgSize = recv(s, buffer, bufferSize, 0); if(*msgSize < 0) { perror("unable to receive "); return(-1); } for(i = 0; i < *msgSize; i++) { printf("%c", buffer[i]); } printf("\n"); return(0); } int clntConnect( char *serverName, int *s ) { int sock; struct sockaddr_in us; struct sockaddr_in them; struct hostent *he; if((he = gethostbyname(serverName)) == NULL) { printf("%s is unknown server\n", serverName); return(-1); } if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("cannot create socket "); return(-1); } memset((char *) &us, 0, sizeof(us)); us.sin_family = AF_INET; us.sin_addr.s_addr = htonl(INADDR_ANY); us.sin_port = 0; if(bind(sock,(struct sockaddr *)&us, sizeof(us)) < 0) { perror("cannot bind"); close(sock); return(-1); } memset((char *)&them, 0, sizeof(them)); them.sin_family = AF_INET; memcpy((char *) &them.sin_addr, he->h_addr, he->h_length); them.sin_port = htons(SERVER_FTP_PORT); if(connect(sock,(struct sockaddr *)&them, sizeof(them)) < 0) { perror("cannot connect "); close(sock); return(-1); } printf("Connected to server, socket number: %d\n", sock); *s = sock; return(0); } void clntExtractReplyCode( char *buffer, int *replyCode ) { sscanf(buffer, "%d", replyCode); return; } |
>>4554 かず さんへ > FTPコマンド > (QUIT,USER,PASS,PWD,STAT,MKD,RMD,CDW,DEL,LIST,HELPcmd,HELP,PORT,NLST) > の組み込み方がイマイチよく分りません。 あんまりな方法だと思いますよ。 vsftpd とか proftpd 辺りのソースを拾って読んでみてはどうでしょうか? |
Solarisで、Perlで、smtpで、メール送信をしていいます。 ポート番号25を使って、smtpサーバに接続してメールの 送信をしているのですが、処理は、正常に終わるのですが、 メールが送信されません。届きません。 どこがいけないのでしょうか。 ------------------------------ use Socket; $server = 'SMTPサーバ' ; $from = '送信元アドレス' ; $to = '送信先アドレス' ; $subject = 'テストメール' ; $data = 'メール送信テスト' ; $send_data = 'X-Mailer: SMTP tool' . "\n"; $send_data .= 'MIME-Version: 1.0' . "\n"; $send_data .= 'Content-Type: text/plain; charset=iso-2022-jp' . "\n"; $send_data .= 'From: '. $from . "\n"; $send_data .= 'To: '. $to . "\n"; $send_data .= 'Subject: ' . $subject . "\n"; $send_data .= "\n"; $send_data .= $data; $port = getservbyname('smtp','tcp'); $struct = sockaddr_in($port,inet_aton($server)); socket(SH, PF_INET, SOCK_STREAM, 0) || die("ソケットの生成失敗 $!") ; connect(SH, $struct ) || die("接続失敗 $!") ; select(SH); $| = 1; select(STDOUT); $respons = <SH> ; unless($respons =~ /^220/) { close(SH); die("接続失敗 $!") ; } $command = "HELO $server\n"; print SH $command ; $respons = <SH> ; &decode(\$respons) ; unless($respons =~ /^250/){ close(SH); die("HELOコマンド失敗 $!") ; } $command = "MAIL FROM:$from\n"; print SH $command ; $respons = <SH> ; &decode(\$respons) ; unless($respons =~ /^250/){ print SH "RSET\n"; close(SH); die("MAILコマンド失敗 $!") ; } $command = "RCPT TO:$to\n"; print SH $command ; $respons = <SH> ; &decode(\$respons) ; unless($respons =~ /^25[0|1]/){ print SH "RSET\n"; close(SH); die("RCPTコマンド失敗 $!") ; } $command = "DATA\n"; print SH $command ; $respons = <SH> ; &decode(\$respons) ; unless($respons =~ /^354/){ print SH "RSET\n"; close(SH); die("DATAコマンド失敗 $!") ; } $command = "$send_data\n.\n"; print SH $command ; $respons = <SH> ; &decode(\$respons) ; unless($respons =~ /^250/){ print SH "RSET\n"; close(SH); die("本文、ヘッダ部送信失敗 $!") ; } $command = "QUIT\n"; print SH $command ; close(SH); select(STDOUT); print "MAILは正常に送信されました。\n"; sub decode{ my $inf = $_[0]; $$inf =~ s/\x0D\x0A|\x0D|\x0A/\n/g; } ----------------------------- |
UNIXを良く知らずみようみまねでshellを作成しています。 ある処理のエラーをハンドリングして結果に対してメール を送信する様にしました。 /usr/bin/mail -s "hoge" megu@hoge.com < hoge.txt ここで質問なのですが、該当コマンドをプロンプト上で 実行すると処理が実行されません。 (実行中のまま戻って来ない?) 強制終了すると、dead.letterが更新されます。 該当処理を記載したshellを実行しても、上記コマンド迄 は実行されているのですが、該当mailコマンドの部分で 処理がされない様で、コマンドを実行した様にshell自体も 終了しません。 cronや他ツールで自動実行させる様にすると実行されます。 根本的なOSの知識なのか、環境の問題なのかさえも分かりません。 とても基本的な質問になるかと思うのですが、教えて頂ければと 思います。 |
はじめまして。質問させてください。 sin_port=0で空いているポート番号を自動取得できますが、 ・ここで取得されたくない番号を指定 ・決められた帯域内(5000〜6000など)で限定して取得 ・予め取得される範囲を取得 のいずれかを行いたいのですが、方法はありますでしょうか? |
>>4556 まんたろう > ポート番号25を使って、smtpサーバに接続してメールの > 送信をしているのですが、処理は、正常に終わるのですが、 > メールが送信されません。届きません。 うちの環境では正常に送信されました。telnet での送信や、メーラー 送信のパケット観察などを行って、成功/失敗時の違いを観察してください。 >>4557 megu - 「sh -x スクリプト名」として、実際に実行されているコマンドを確認する。 端末からの入力を待っているなら、リダイレクトまわりが怪しげな気が。 - dead.letter の中を見て、エラーを観察する (dead.letter の中にエラーが 記述されるのかは覚えていませんが) - mail コマンドが吐くエラーを観察する。標準出力・標準エラー出力を捨てて いるなら、捨てないようにする。 >>4558 カルネ Linux なら ip_local_port_range、NetBSD なら net.inet.ip.anonportmax、 FreeBSD なら制限方法がない (たぶん) など、OS によって異なります。 |
シェルで、dateコマンドで取得した時間から5分前の の時間を取得したいのですが、できるでしょうか。 date +%H%M%S と実行します。 結果として、「130530」が取得できます。 そこから、取得した、「1305030」から5分前の「130030」を 求めたいのですが、できるのでしょうか。 環境は、 Solaris、shです。 |