|
|
1.1 root 1: #include <sys/param.h>
2: #include <sys/types.h>
3: #include <sys/stream.h>
4: #include <nlist.h>
5: #include <stdio.h>
6:
7: #include <sys/inet/in.h>
8: #include <sys/inet/tcp.h>
9:
10: struct nlist nl[] = {
11: {"_tcpsocks", 0},
12: {0, 0},
13: };
14:
15: int kern_fd;
16:
17: main(argc, argv)
18: char *argv[];
19: {
20: char *nuxi, *core;
21: struct block b;
22: register i;
23:
24: struct socket{
25: struct tcpcb *so_tcpcb;
26: struct queue *so_rq;
27: struct queue *so_wq;
28: int so_rcount;
29: int so_wcount; /* because q->count is inaccurate */
30: struct socket *so_head; /* parent who listened */
31: int so_dev;
32: int so_state;
33: int so_options;
34: in_addr so_laddr;
35: in_addr so_faddr;
36: tcp_port so_lport;
37: tcp_port so_fport;
38: int so_oobmark;
39: int so_delimcnt; /* to detect logical eof */
40: } so;
41: #define SO_DONTROUTE 0x1
42: #define SO_KEEPALIVE 0x2
43: #define SO_ACCEPTCONN 0x4 /* this is real */
44:
45: #define SS_OPEN 0x1 /* by user */
46: #define SS_PLEASEOPEN 0x2 /* waiting for user open */
47: #define SS_RCVATMARK 0x4 /* some kind of OOB */
48: #define SS_WAITING 0x8 /* wait for user control */
49: #define SS_ACTIVE 0x10 /* has tcp action */
50: #define SS_HANGUP 0x20 /* HANGUP on TH_FIN */
51: #define SS_HUNGUP 0x40 /* socket has been hung up (avoid multiple) */
52: #define SS_WCLOSED 0x80 /* write side is closed */
53:
54: #define STATE_BITS "\10WCLOSED\7HUNGUP\6HANGUP\5ACTIVE\4WAITING\3RCVATMARK\2PLEASOPEN\1OPEN"
55: nuxi = "/unix";
56: core = "/dev/kmem";
57: if(argc > 1)
58: nuxi = argv[1];
59: if(argc > 2)
60: core = argv[2];
61: if((kern_fd = open(core, 2)) < 0){
62: perror(core);
63: exit(1);
64: }
65: nlist(nuxi, nl);
66: if(nl[0].n_value == 0){ printf("nlist %s error\n", nuxi);
67: exit(1);
68: }
69: if(strcmp(core, "/dev/kmem"))
70: nl[0].n_value &= 0xffffff;
71: lseek(kern_fd, nl[0].n_value, 0);
72: for (i=0; i<32; i++) {
73: if(read(kern_fd, &so, sizeof(so)) != sizeof(so)){
74: perror("read");
75: exit(1);
76: }
77: printf("dev %d:\tstate %x, options %x\n", so.so_dev, so.so_state, so.so_options);
78: printf("\t\tladdr %x faddr %x lport %d fport %d\n", so.so_laddr, so.so_faddr, so.so_lport, so.so_fport);
79: }
80:
81: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.