コマンドラインから簡単にUDP通信を行うには

Linux/MacなどでコマンドラインからTCP通信を行うには、telnetがよく使われますね。

HTTPアクセスをtelnetで行う例:

telnet example.com 80
GET / HTTP/1.1(改行)
Host: example.com(改行)
Connection: close(改行)
(空行)
HTTP 200 OK
Content-Type: text/html
... 以下略

UDPでTCPと同じようにテキストベースの通信を行うには、netcat(ncコマンド)が便利です。
netcatはtelnetの機能拡張版ともいえるツールで、TCP/UDPプロトコルを扱う上ではぜひ導入しておきたいものです。

nc コマンドが手元にインストールされてない場合、

CentOS系Linuxなら sudo yum install netcat

Debian なら sudo apt-get install netcat

OS X(Homebrew)なら brew install netcat

でインストールできるかと思います。

netcatは基本的にはtelnetと同じ使い方ができます。

使い方:

netcat -u 接続先IPまたはホスト名 ポート

-u はUDP通信を表すオプションで、省略するとデフォルトでTCP通信になります。
telnet同様、パイプなしで実行すると、標準入力待ち状態になり、Ctrl-Cで切断できます。

また、telnetと違い、サーバになることもできます。

netcat -l -u -p port

-l は Listenモード(サーバモード)、
-u はudpプロトコルでの待受を意味します。(省略するとTCPプロトコル)
-p は待ち受けるポート番号です。

簡易通信サーバになって接続をテストすることも可能です。便利ですね。

もちろん、サーバ・クライアント両方ともncでも通信できます。

サーバ側コンソール(ローカル):

$ nc -l -p 55440 # 適当なTCPポート55440で待受(udpでもOK)

クライアント側コンソール(ローカル):

$ nc localhost 55440 # サーバにつなぐ。(TCPならtelnetでもOK)
hogehoge(改行)

こうすると、サーバ側コンソールに hogehoge と表示されます。
逆にサーバ→クライアントにメッセージを送ることも可能です。

また、上記の例では同一ホストで実行していますが、もちろんIPアドレス、ドメイン指定などで別マシンとも通信できます。

ローカルでやると動くのに、別マシンにはつながらない、という場合はファイアウォールを確認するとだいたい解決するかと思います。
終了できない!と焦ったら、Ctrl-Cを推してみましょう。

ぜひご自身で色々試してみて下さい!

[Linux] ping された事を検知する(tcpdump)

ネットワーク到達確認をするときにpingをうちますが、
自分が本当にpingを受け取ったのか確認したい事もたまにあります。

こんな時、pingされたことを検知するには、tcpdumpを使うと便利です。

> sudo tcpdump ‘icmp[0] = 8’

############ 監視サーバ側 ############## 
% sudo tcpdump 'icmp[0] = 8'     
[sudo] password for user: 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
(監視状態に入る)

ここで監視サーバにpingが来ると監視サーバには以下のようにログが流れます。

17:35:23.241574 IP xxx.xxx.xxx.xxx > example.com: ICMP echo request, id 13727, seq 0, length 64
17:35:24.241852 IP xxx.xxx.xxx.xxx > example.com: ICMP echo request, id 13727, seq 1, length 64

xxx.xxx.xxx.xxxは実際にはping元のIPアドレス(またはホスト)、example.comはping先(監視サーバ)のIPアドレス(またはホスト)になります。

終了するときは Ctrl-C で終了します。

Linuxで “ls -l” のパーミッションに現れるドットの謎

Linux で ls -l の表示をした時に、パーミッション欄の右側にドット(“.”)が現れる事がある。

# ll -h /etc/profile.d/
-rw-r--r--. 1 root root 1.2K  4月 28 23:58 2010 colorls.csh
-rw-r--r--. 1 root root 1.2K  4月 28 23:58 2010 colorls.sh
-rw-r--r--  1 root root 1.8K 12月 11 08:19 2011 foo.sh

何度か調べるのだけど、すぐ忘れてしまうのでメモしておく。 続きを読む Linuxで “ls -l” のパーミッションに現れるドットの謎

WineでInstall Mono 2.8 or greaterエラーになった時の対応方法

LinuxでWindowsアプリケーションを実行する必要があったためWineでの実行を試したところ、

$ wine foo.exe
wine: Install Mono 2.8 or greater for Windows to run .NET 4.0 applications. 

と言われてしまいました。wine 2.10 を入れてるのに。

Wine内で動くmonoライブラリのバージョンが古いのだろうと判断し、
winetricksを使って.Net Frameworkライブラリのdotnet40を
インストールしたら動くようになりました。

手順は以下のとおりです。 続きを読む WineでInstall Mono 2.8 or greaterエラーになった時の対応方法

vim で Zen coding を使う方法

Zencoding vim logo
最近 zen coding にはまっています。
vim でも使いたい、ということで導入方法をまとめておきます。

参考:知らない人は損してる?コーディングが3倍速くなるZen-Codingを導入してみた 続きを読む vim で Zen coding を使う方法

WindowsマシンでUbuntu Linux をデュアルブートでインストール

既存のWindows環境を残しつつUbuntuを導入する場合、Ubuntu 公式の Windows インストーラ(Wubi)が便利です。
リンク先の「Run it with Windows」からダウンロードできます。
普通のWindowsプログラムのインストーラと同じようにインストールでき、アンインストール時も「プログラムの追加と削除」メニューから安全に削除できます。
 
– 参考:
WindowsXPでお手軽Ubuntu

Cygwinでも apt-get (apt-cyg) を使う

apt-cyg をインストールすることでパッケージインストールをCUIで行うことができるようになります。
 
apt-cyg プロジェクト
http://code.google.com/p/apt-cyg/
 
■インストール手順:

svn –force export http://apt-cyg.googlecode.com/svn/trunk/ /usr/local/bin/
chmod +x /usr/local/bin/apt-cyg

 

■使い方:

パッケージをインストールする。
apt-cyg install <package names>
 
パッケージを削除する。
apt-cyg remove <package names>
 
setup.ini を更新する。
apt-cyg update
 
インストールされているパッケージの一覧を表示する。
apt-cyg show
 
パターン(複数可)に一致するパッケージを探す。
apt-cyg find <pattern(s)>
 
パターン(複数可)に一致するパッケージの情報を表示する。
apt-cyg describe <pattern(s)>
 
指定したコマンドやファイルを含むパッケージを見つけ出す。
apt-cyg packageof <commands or files>

Ubuntu 10.10 で Git GUI を使う

Linuxで一番安定しているGitのGUI環境は git-guiだそうです。
起動するには端末から

git gui

で起動します。
日本語フォントが潰れている場合は wish8.5 をインストールし以下の手順でwish8.5に差し替えてください。

$ sudo rm /etc/alternatives/wish
$ sudo ln -s /usr/bin/wish8.5 /etc/alternatives/wish
$ sudo rm /etc/alternatives/wish.1
$ sudo ln -s /usr/share/man/man1/wish8.5.1.gz /etc/alternatives/wish.1

 
参考:
Ubuntu 10.04 LTS のgit-gui,gitkのフォントが汚い問題への対応方法

GEditのショートカットキーを変える

GEdit は標準ではショートカットキーが変えられませんが、EditShortcuts プラグインを入れる事で設定できるようになります。
 
http://empty.23inch.de/pmwiki.php/Main/EditShortcuts
 
tgzファイルをダウンロードし、中の INSTALL ファイルを参考に、
editshortcuts/ フォルダと editshortcut.gedit-plugin ファイルを ~/.gnome2/gedit/plugins にコピーしてインストールします。

cp -R editshortcut/ editshortcut.gedit-plugin ~/.gnome2/gedit/plugins

 
インストール後、プラグインを有効にするとツールメニューに”Edit Shortcuts”という項目が増え、そこから各種ショートカット設定ができるようになります。
 
たとえば、RedoキーがデフォルトでCtrl+Shift+Zなのを、WindowsのようにCtrl+Yに変更したい、という場合は

GEditWindowActions > EditRedo

をダブルクリックすると新規ショートカット設定ウィンドウが開くので、
Ctrl+Yを入力して適用ボタンを押す、といった感じです。

Ubuntu の起動音を無音にする

ネットブックやノートにUbuntuを入れたのに、音が気になって公共機関で立ち上げられない、という事がないように無音化の手順を書いておきます(Ubuntu 10.10で動作確認)。
 
1.システム->設定->サウンドを開く。
2.サウンドのテーマを「Ubuntu」から「なし」に変更。
3.設定を閉じる。
4. 無音system-ready.ogg (下記参照)をダウンロードする。
4./usr/share/sounds/ubuntu/stereo/system-ready.ogg を無声音ファイルに差し替え

sudo mv /usr/share/sounds/ubuntu/stereo/system-ready.ogg{,.original}
sudo cp system-ready.ogg /usr/share/sounds/ubuntu/stereo/system-ready.ogg

 
■ system-ready.oggについて
音量の控えめなものなら何でもいいですが、完全に静音にしたい場合は下のファイルに差し替えてください。
 
無音system-ready.oggファイルをダウンロード
 
参考:
Re: Startup Sound (Tack-ack-ack)(Ubuntu Forum)