Ubuntu下指令-ポートの占有状況とパケットの表示


linuxではnetstatでポートの使用状況を表示できます.しかし、筆者は今日、他の人が命令でメッセージデータをつかみ、印刷しているのを見た.以前はwiresharkが捕まえることしか知らなかったが、linuxがこの機能を統合していることは知らなかった.まあ、筆者はやはり寡聞だ.
まず筆者の目標を挙げてみましょう
1 netstatで特定のポートの使用状況をクエリーし、クエリー結果にキーワードのレコードを含める
2 linuxのコマンドで、メッセージをキャプチャし、16進数で印刷します.

1 netstat


netstatについて、筆者もネットで探して、私に役立つコマンドを整理しました.
-aはすべての項目を表示します.私は一般的にnetstatで必ず-aに従います.
-nは数字に表示できるものを数字に表示します.例えば、Local Addressは-nを使用しないと、あなたのマシン名が表示される可能性があります.ただし-nを使用すると127.0.0.1と表示されます
-tはすべてのtcpの
-uはすべてのudpの
-pプログラム名およびpidを表示
筆者が使用しているのはubuntuで、直接netstatを使用すると、両端の内容が表示されます.前の部分は私が必要としていますが、後ろには大きな内容があります.ネット上ではlinux内部ポートと言われていますが、伝送の効率が2倍高いと言われていますが、筆者は検証したことがありません.
netstat > 1.txt
以下、1.txtの内容(一部の内容、後ろのunixの部分が多すぎます)
  Internet   (w/o    )
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 192.168.0.110:53462     192.168.0.1:netbios-ssn ESTABLISHED
tcp        0      0 192.168.0.110:40288     a184-50-91-58.dep:https ESTABLISHED
tcp        0      0 192.168.0.110:33104     101.201.173.115:http    ESTABLISHED
tcp6      32      0 [  ]:39838          a184-50-91-58.dep:https CLOSE_WAIT 
   UNIX     (w/o    )
Proto RefCnt Flags       Type       State         I-Node     
unix  2      [ ]                            20915    /run/user/1000/systemd/notify
unix  3      [ ]                            13090    /run/systemd/notify
unix  2      [ ]                            13095    /run/systemd/journal/syslog
unix  17     [ ]                            13096    /run/systemd/journal/dev-log
unix  7      [ ]                            13110    /run/systemd/journal/socket
unix  3      [ ]                          1578283  
unix  3      [ ]                          1577660  
unix  3      [ ]                          15666    /run/systemd/journal/stdout

well,今筆者はunixドメインソケットをしばらく使えないので,しばらく無視しましょう.
では、筆者にとってudpとtcpのポート占有率が悪いことが多いので、以下の2つのコマンドが一番よく使われています.
Netstat-antpとnetstat-anup
では、tcpとudpを一緒に調べる方法はありませんか.もちろんあります.それは
netstat -anutp
ハハハ、3秒大笑い
筆者はjavaでtcpserverを書きました.コードは以下の通りです.
public class TcpServer {
	public static void main(String[] args) {
		try {
			ServerSocket server = new ServerSocket(9001);
			while (true) {
				Socket s = server.accept();
				InputStream in = s.getInputStream();
				byte[] buffer = new byte[16];
				while (in.read(buffer) > 0) {
					System.out.println(new String(buffer));
				}
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

なぜそう書くのか迷う必要はありません.私はポート9001を占有するために、プログラムを実行します.
netstat-antpの実行
確かに、9001ポートの傍受があり、傍受タイプはtcp 6、ステータスはLISTENですが、これ:::9001はちょっと変に見えます
まず、tcp 6は何者なのか、そしてこのipアドレスなのか、何者なのか.顔を見ると、多分ipv 6でしょう.
では、筆者はserversocketのコードを次のように変更します.
			ServerSocket server = new ServerSocket();
			server.bind(new InetSocketAddress("127.0.0.1", 9002));
プログラムを実行し、netstat-anutpを実行します.
少なくとも、ipアドレスは今回正常になったでしょう.
OK、では、実際の操作では、9002ポートの使用状況を調べる必要があるかもしれません.
netstat -anutp|grep 9002
well done,これでnetstatは筆者が現段階で出会ったすべての問題を解決できるようになった.

2 linuxのコマンドで、メッセージをキャプチャし、16進数で印刷します。


有名なtcpdump.揚げてみると、tcpdumpはtcpのバッグしか捕まえられないようですが、hehe、実はそうではありません.彼もudpのバッグを捕まえることができます.
###tcpdump
見ることができるのは、私は権限がなくて、ユーザーを切り替えて、#tcpdumpでたくさんのものを見て、筆者は理解できないと言っています.
バージョン番号##tcpdump-hの表示
もし、tcpdumpが押されていなければ、どのようにインストールされているのかを検索することができますが、筆者はここでは詳しく説明しません.
筆者の目的は,サーバとしての9002ポートのデータを傍受することである.
へへへ:
tcpdump -i any -nn  ‘port’  -nn 'port 9002' -vv -X
OK、これが私の望みです.9002ポートを傍受し、受信したデータのhello worldを傍受し、9002ポートから56564ポートに送信された応答パケットも見ました.
ああ、言う価値があるのは、なぜ私のserversocketがhelloworldを受け取ることができるのかということです.なぜなら、私はsocketclientを書いて、9002にhello worldを絶えず送ったからです.
socketclient:
public class TcpClient {
	public static void main(String[] args) {
		try {
			Socket s = new Socket("localhost", 9002);
			OutputStream out = s.getOutputStream();
			while (true) {
				out.write("hello world".getBytes());
				out.flush();
				try {
					Thread.sleep(10 * 1000l);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

最後に命令を説明します
   tcpdump -i any  -nn 'port 9002' -vv -X
-i interface、NICの名前、後に具体的なNICの名前(ifconfig後者tcpdump-D)と取得することができて、筆者のコンピュータの上でanyを見て、すべてのNICを指すようです
-nnはhostあるいはport名を傍受して、このネット上の解釈はたくさんあって、何のsrc host、dist host、例えば私は捕まえて、ipアドレスは127.0.0.1で、ポートは9002のサーバーのパケットで、それでは命令は-nn'src host 127.0.0.1 and port 9002'に書くことができます.しかし、実際には、ポートはipアドレスによって使用されているに違いありません.そして、私にとって、サーバーがパッケージをつかむのは意味があります.だから、実はipアドレスがあるかどうかは、そんなに重要ではないようです.ポートがあればいいです.
-vv詳細
-X 16進数で出力
筆者にとって、上記の命令を丸暗記すればよい.
仕事を終える.